thinkphp6关联模型绑定属性到父模型。
方法一:使用bind方法绑定属性到父模型
// 关联用户等级模型
public function level()
{
return $this->hasOne(UserLevel::class, 'id', 'level')->bind(['level_name']);
// 属性别名; 别名在前,字段名在后
// return $this->hasOne(UserLevel::class, 'id', 'level')
// ->bind(['level_name' => 'name']);
}
// 查询
User::with('level')->findOrEmpty(1);
// 查询结果
{
"id": 1,
"sn": "100001",
"nickname": "测试用户",
"level": 1,
"create_time": "2022-03-23 18:56:40",
"update_time": "2022-03-23 18:56:40",
"level_name": "普通等级"
}
方法二:使用动态绑定关联属性
// 关联用户等级模型
public function userLevel()
{
return $this->hasOne(UserLevel::class, 'id', 'level');
}
// 查询语句
User::with('user_level')->find(1)
->bindAttr('user_level', ['level_name'])
->hidden(['user_level']);
// 查询结果
{
"id": 1,
"sn": "100001",
"nickname": "测试用户",
"level": 1,
"create_time": "2021-09-06 18:29:39",
"update_time": "2021-09-06 18:29:39",
"level_name": "普通等级"
}
这里有一点要注意,如果用户等级表的level_name字段名为name时,使用bindAttr关联属性会返回用户等级表的模型名称。
最后:关于appendRelationAttr的使用
在文档中,appendRelationAttr方法的使用只是草草一句带过。实际用起来并没有达到预期效果。如果有朋友知道是具体是怎么使用的希望可以告知一下小弟。当然如果有其他疑问或者本文描述错误的也可以加一下我微信告知一下(MJ103536)。