Eloquent - 枢纽用户在哪里或者没有

时间:2016-04-25 21:38:25

标签: php laravel laravel-5 laravel-5.1

我正在尝试编写一个函数来获取分配给auth'd user和/或没有分配USERS的存储桶的所有“存储桶”。

关系等,按照自己的意愿行事。除非我错过了什么?

如何分配所有桶用户 - 还包括未分配用户(包括auth用户)的存储桶。

  1. 用户分配给
  2. 已分配 NO 用户的存储桶。即数据透视表不包含存储桶等行
  3. 我的问题很可能源于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();
    

2 个答案:

答案 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/