【问题标题】:Laravel query, show results from one table where their id isn't in anotherLaravel 查询,显示一个表的结果,其 id 不在另一个表中
【发布时间】:2015-07-02 06:38:59
【问题描述】:

我有 2 个表 users_teams 和 events_users

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

  • uid gid 名称
  • 0 0 用户A
  • 1 0 用户 B
  • 2 0 用户 C

events_users 在用户参加活动时拥有

  • 开斋节 uid gid
  • 0 0 0
  • 0 1 0
  • 1 1 1

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

所以对于 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();

【问题讨论】:

  • ->whereNull('events_users.uid') 因为在这种情况下不会有'uid'
  • $eid i 事物必须有一个 VALUE(此处为 0 )而不是 NULL,sitepoint.com/understanding-sql-joins-mysql-databaselookpup LEFTJOIN 示例
  • 不幸的是同样的结果。
  • 不知道您使用的课​​程。你不能简化查询吗??
  • 认为一定是NULL,见Emma在Left Join中的那一行。

标签: php mysql sql laravel join


【解决方案1】:

我认为这是你需要的:

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

我试过这个简单的SQL query

我希望这对你有用。

【讨论】:

  • 嘿,这行得通!谢谢。只是想知道是否有人可以在不必使用 Raw SQL 的情况下做到这一点,如果没有,我将标记为接受的答案。
  • 你能发布你的模型声明吗?当然这可以用 Eloquent 来完成。我会尝试另一种方法。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2013-10-28
  • 2021-08-20
相关资源
最近更新 更多