thinkphp5 关联查询指定属性
应用场景:一对一关联
使用方法:hasOne
1,设置关联
在当前查询对应的模型中定义要关联的模型以及查询字段,并绑定属性到当前查询对应的模型。
例如,一个用户有一个个人资料,当需要根据用户id获取用户对应的资料时,我们可以按照以下方法定义
User
模型:
<?php namespace app\index\model; use think\Model; class User extends Model { public function profile() { return $this->hasOne('Profile','uid')->field('id,uid,nickname')->bind([ 'truename' => 'nickname', 'profile_id' => 'id', ]); } }
hasOne('Profile','uid') User模型关联Profile模型,且Profile模型中uid字段与User模型的id关联。
field('nickname') 查询关联模型Profile中的指定属性, 即:nickname字段
bind([
'truename' => 'nickname',
'profile_id' => 'id',
])
使用数组的方式指定绑定属性别名,绑定后,在查询结果中,即可直接使用属性别名获取,关联模型中指定属性的值。
2,使用方法
当需要根据用户id获取用户对应的资料时,我们就可以按照以下方法在控制器中查询获取
User控制器:
$fields='id,username,loginip';//查询user模型中的指定属性 $list = $this->model ->with('profile') ->field($fields) ->select();
____________________________________没错,我是分割线_____________________________________________________________
应用场景:一对一关联,多对一时也可以使用
使用方法: belongsTo
1,设置关联
当需要从Profile控制器获取User模型中的属性时,使用belongsTo方法,调整对应属性值即可
Profile模型:
<?php namespace app\index\model; use think\Model; class Profile extends Model { public function user() { return $this->belongsTo('User','uid')->field('username')->bind([ 'user_name' => 'username', ]); } }
belongsTo('User','uid') Profile模型关联User模型,且Profile模型中uid字段与User模型的id关联。
field('id,username') 查询关联模型User中的指定属性, 即:id,username字段
bind([
'user_name' => 'username',
])
使用数组的方式指定绑定属性别名,绑定后,在查询结果中,即可直接使用属性别名获取,关联模型中指定属性的值。
2,使用方法
当需要根据用户资料获取用户名时,我们就可以按照以下方法在控制器中查询获取
Profile控制器:
$fields='uid,nickname';//查询Profile模型中的指定属性,因为需要与user模型的id属性关联,所以uid必须查询 $list = $this->model ->with('user') ->field($fields) ->select();
参考:https://www.kancloud.cn/manual/thinkphp5/139045