之前有写过laravel关联查询的坑,后经一位博友提醒可以简写,详见https://my.oschina.net/u/3470006/blog/3020215
自己实践了下果然如此,要查询user表和与之关联的信息表userinfo直接可以用
User::with('HasUsersInfo:userid,address')->get(['id,name']);
with里要写上关联字段userid,get部分写上关联的id,这样以来就不需要用麻烦的闭包查询
这里可能有人想问如果想查询关联模型模型的关联模型怎么办,很简单,在with数组添加关联模型的关联方法,比如用户信息表又关联个信息分数表InfoScore
显然的,InfoScore的infoid和UserInfo的id相关联,而UserInfo模型的关联定义如下
public function HasInfoScore(){
return $this->HasOne('InfoScore','infoid','id');
}
如果要同时查询用户的名字及用户的地址,还有用户信息所对应的分数,可以这样
User::with(['HasUsersInfo:userid,address,id','HasUserInfo.HasInfoScore:infoid,score'])->get(['id,name']);
注意,由于使用了超过一个的关联,关联字符串需要使用数组形式,嵌套的关联 使用主模型(比如User)的关联模型的方法(比如HasUserInfo)加上点的形式进行定义(比如HasUserInfo.HasInfoScore)就行了,还需要注意只要是关联就必须写上关联字段,比如之前查地址只用address和userid,现在加上分数的关联就要再加上用户信息表的关联字段(也就是用户信息的id)