Laravel查询,显示一个表中的结果,其中id不在另一个

时间:2015-04-23 21:02:25

标签: php mysql sql laravel join

我有2个表users_teams和events_users

users_teams拥有所有用户数据(此处为示例)

  • uid gid name
  • 0 0用户A
  • 1 0用户B
  • 2 0用户C

events_users在用户处于活动时具有

  • eid uid gid
  • 0 0 0
  • 0 1 0
  • 1 1 1

我正在编写一个laravel查询来从users_teams中选择任何具有指定gid的用户,并且也不在带有指定eid的events_users中。

因此对于gid 0和eid 0我应该得到用户C的详细信息

我认为反连接会起作用,但不断变空。有人可以帮忙吗?

    $result = Users_team::where('users_teams.gid', '=', $gid)
                    ->leftJoin('events_users', function($join) use ($gid, $eid)
                        {
                            $join->on('users_teams.uid', '=', 'events_users.uid')
                            ->where('events_users.eid', '=', $eid);
                        })
                    ->whereNull('events_users.eid')
                    ->get();

1 个答案:

答案 0 :(得分:1)

我认为这就是你所需要的:

$users = Users_team::whereRaw("uid NOT IN (SELECT uid FROM events_users WHERE gid = ? AND eid != ?)", [$gid, $eid])->get();

我尝试了这个简单的SQL query

我希望这适合你。