我正在尝试编写一个函数来获取分配给auth'd user
和/或没有分配USERS的存储桶的所有“存储桶”。
关系等,按照自己的意愿行事。除非我错过了什么?
如何分配所有桶用户 - 还包括未分配用户(包括auth用户)的存储桶。
我的问题很可能源于orWhere
查询......
$buckets = Team::currentTeam()->buckets()->with('user')->whereHas('user', function($query) {
$query->where('user_id', Auth::user()->id)
->orWhere('user_id', function() {
$query->count();
}, '<', 0);
})->get();
答案 0 :(得分:4)
没有测试过这个,但我认为这应该有效。您要删除该orWhere
个查询并添加orHas('user', '=', 0)
。
$buckets = Team::currentTeam()->buckets()->with('user')->whereHas('user', function($query) {
$query->where('user_id', Auth::user()->id);
})->orHas('user', '=', 0)->get();
答案 1 :(得分:0)
您可能考虑的另一种可能的解决方案是使用left join
。
注意:此可能不准确,因为我不知道您的数据库架构。
Team::currentTeam()
->buckets()
->leftJoin('users', 'users.bucket_id', '=', 'buckets.id')
->where(function($query) {
$query->where('users.id', $user_id)
->orWhereNull('user.id');
});
请同时查看此博客文章
AND-OR-AND +雄辩的方括号 https://laraveldaily.com/and-or-and-brackets-with-eloquent/