三张表,文章表,权限表,用户表
article文章表字段:id,name,content
permission权限表字段:id,article_id,user_id
user用户表字段:id,name
多对多
一篇文章可以放权给多个用户看,一个用户有权限可以看多篇文章,文章与用户存在多对多的关系,中间通过权限表作出关联
需求一:查询文章的时候,显示有权限的用户
返回json
{
"success": true,
"message": "OK",
"data": {
"id": 12,
"name": "文章标题",
"content": null,
"permissions": [
{
"id": 212,
"userId": 1,
"user": {
"id": 1,
"trueName": "李可",
"avatarUrl": null
}
},
]
},
"code": 200,
"X-Request-Id": "ez6"
}
1.在article.php中写下多对多关联
/* * 扩展属性 添加扩展属性时,必须添加
* @property array $permission
×/
public function extraFields()
{
return [
'permissions'
];
}
public function getPermission()
{
return $this->hasMany(Permission::class, ['article_id' => 'id'])->joinWith(['user']);
}
2.在permission.php中写
/* * 扩展属性 添加扩展属性时,必须添加
* @property array $user
×/
public function extraFields()
{
return [
'user'
];
}
public function getUser()
{
return $this->hasOne(User::class, ['id' => 'userId']);
}
请求时,在url后面添加expand 示例:url?expand=permissions.user
需求二:
返回json:
{
"success": true,
"message": "OK",
"data": {
"id": 12,
"name": "文章名称",
"content": "文章内容",
"users": [
{
"id": 212,
"name": "张三"
},
{
"id": 213,
"name": "李四",
}
]
},
"code": 200,
"X-Request-Id": "ez6"
}
1.在article.php中
/* * 扩展属性 添加扩展属性时,必须添加
* @property array $permission
×/
public function extraFields()
{
return [
'permissions'
];
}
public function getPermissions()
{
return $this->hasMany(User::class, ['id' => 'userId'])->via('Permission');
}
public function getPermission(){
return $this->hasMany(Permission::class,['ezTargetId' =>'id']);
}