假设Post
模型存储用户创建的任何“post”,PostLog
模型存储Post
模型的更改日志,显然,Post
与PostLog
具有hasMany()
关系。
现在,我想在该关系之外定义一个has-one-of-many。PostLog
具有user_id
,它定义了进行更改的用户。我想检索由具有特定角色的用户创建的最新PostLog
。
对于users
和roles
表,它们的关系被建立为多对多,这意味着存在连接它们两者的role_user
。
这是我得到的最好的结果,但显然没有得到正确的值:
class Post extends Model
{
public function latestAdminPostLog()
{
return $this->hasOne(PostLog::class)->ofMany([
'id' => 'max',
'created_at' => 'max'
], function ($query) {
$query->whereExists(function ($qry) {
$qry->select(DB::raw(1))
->from('users')
->join('role_user', 'users.id', '=', 'role_user.user_id')
->join('roles', 'role_user.role_id', '=', 'roles.id')
->whereColumn('users.id', 'post_logs.user_id')
->whereIn('roles.name', ['admin-x', 'admin-y']);
});
});
}
}
非常感谢你的帮助。谢谢!
注意:我使用santigarcor/laratrust包进行用户角色管理。
1条答案
按热度按时间oaxa6hgo1#
只管做
这将返回由具有admin-x或admin-y角色的用户创建的最新PostLog
祝你今天愉快