选择不在另一个表laravel 5.5中的所有列

时间:2017-09-23 21:53:02

标签: php mysql laravel

我有两张桌子 - 第一张叫做'用户',第二张叫做'买入道'。

users table

enter image description here

我正在尝试选择那些user_name不在buy_courses中的所有用户。我试过像 -

这样的东西
$users = DB::table('users')
                ->rightjoin('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
                ->get();

当我使用'<>'时,它会返回其user_name在'buy_courses'中的所有用户,然后我将获得所有用户。什么应该是正确的查询?

4 个答案:

答案 0 :(得分:4)

使用Eloquent尝试一下:

$courseUserNames = BuyCourses::pluck('user_name')->all();
$users = User::whereNotIn('user_name', $courseUserNames)->select(...)->get();

或者,如果您更喜欢使用数据库查询:

$courseUserNames = DB::table('buy_courses')->pluck('user_name')->all();
$users = DB::table('users')->whereNotIn('user_name', $courseUserNames)->select(...)->get();

答案 1 :(得分:3)

DB::table("users")->select('*')->whereNotIn('user_name',function($query) {

   $query->select('user_name')->from('buy_courses');

})->get();

加入实际上是Laravel的内部联接,所以实际上也许你可以尝试:

DB::table('users')
            ->join('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
            ->get();

答案 2 :(得分:0)

您可以使用SQL的'NOT IN'。

示例:

{{1}}

答案 3 :(得分:0)

只需将=替换为!=,然后使用函数join

$users = DB::table('users')
  ->join(
    'buy_courses', 
    function ($join)
    {$join->on('users.user_name', '!=', 'buy_courses.user_name');}
  )
  ->get();