thinkphp5 关联查询指定属性

作者: wxfeng 分类: php 发布时间: 2018-11-12 19:00

应用场景:一对一关联

使用方法: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

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注