【问题标题】:Trouble converting an SQL query to Eloquent将 SQL 查询转换为 Eloquent 时遇到问题
【发布时间】:2019-08-25 21:37:05
【问题描述】:

试图让这个查询在 eloquent 中工作

一个用户可以在多个团队中,但是我想生成一个不在特定团队中的用户列表。下面的 SQL 查询如果直接执行就可以工作,但希望通过将其转换为 eloquent 来使其更简洁

SELECT * FROM users LEFT JOIN team_members ON team_members.member_id = users.id WHERE NOT EXISTS ( SELECT * FROM team_members WHERE team_members.member_id = users.id AND team_members.team_id = $team_id )

这应该提供所有不属于团队 $team_id 成员的用户的列表

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案1】:

    这是一个猜测广告,你没有提供太多关于你的 Eloqent 模型的信息,但这里有一个提示:

    User::doesnthave('teamMembers', function($builder) use($team_id){
       return $builder->where('team_members.team_id');
    });
    

    假设您有一个“用户”模型,上面设置了“团队成员”关系

    您可以仔细查看Laravel docs for doesntHave

    【讨论】:

      【解决方案2】:

      Laravel 5.8

      假设您的模型名称为“User.php” &其中有方法名称“teamMembers”。

      基本

      $users = User::doesntHave('teamMembers')->get();
      

      前进

      use Illuminate\Database\Eloquent\Builder;
      
      $users = User::whereDoesntHave('teamMembers', function (Builder $query) {
          $query->where('id', '=', {your_value});
      })->get();
      

      您可以在此链接中找到详细说明>> https://laravel.com/docs/5.8/eloquent-relationships#querying-relationship-absence

      Laravel 5.2

      例子:

      DB::table('users')
                  ->whereExists(function ($query) {
                      $query->select(DB::raw(1))
                            ->from('orders')
                            ->whereRaw('orders.user_id = users.id');
                  })
                  ->get();
      

      查看此链接以获取高级 where 子句:

      https://laravel.com/docs/5.2/queries#advanced-where-clauses

      【讨论】:

        【解决方案3】:

        你可以使用下面的例子

        $list = User::leftJoin('users', 'users.id', '=', 'team_members.member_id')
                     ->whereNotExists(function ($query) use ($team_id) {
                     $query->from('team_members')
                           ->whereRaw('team_members.member_id = users.id')
                           ->where('team_members.team_id', '=', $team_id);
                      })
                    ->get();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 2017-05-24
          • 1970-01-01
          • 2017-01-20
          • 2020-10-03
          • 1970-01-01
          相关资源
          最近更新 更多