【发布时间】:2019-03-24 17:36:21
【问题描述】:
我正在尝试在我的模型上创建一个范围,根据以下可能性查询与用户无关的结果:
1. assigned_user_id 不为空且reported_by 不匹配,并且任何用户的team_ids(一对多用户到团队)匹配assigned_team_id
和
2. assigned_user_id 不匹配和reported_by 不匹配并且任何用户的team_ids(一对多用户到团队)匹配assigned_team_id
对我来说唯一棘手的部分是assigned_user_id 可以为空。 assign_team_id 是必需的,reported_by 是必需的。这是我目前的尝试:
public function scopeNotRelativeTo($query, User $user)
{
$teamIDs = $user->teams->pluck('id');
$query->whereNull('assigned_user_id')
->orWhere('assigned_user_id', '!=', $user->id)
->where('reported_by', '!=', $user->id)
->whereNotIn('assigned_team_id', $teamIDs);
}
这将返回 46 个结果,我期待 41 个结果,所以它不太正确。 toSql() 是
"select * from \"bugs\" where (\"assigned_user_id\" is null or \"assigned_user_id\" != ? and \"reported_by\" != ? and \"assigned_team_id\" not in (?, ?)) and \"bugs\".\"deleted_at\" is null order by \"created_at\" desc"
看起来很接近,但仍然明显不完美。我可以肯定地看到,大部分结果都与匹配的 team_id 相匹配。伪代码版本为Give me results where the assigned_user_id is not null AND reported_by doesn't match userId AND assigned_team_id not in user->teamIds OR assigned_user_id doesn't match userId AND reported_by doesn't match userId and assigned_team_id is not in user->teamIds。
【问题讨论】:
标签: laravel laravel-5 orm eloquent laravel-5.7