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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值