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

Ras*_*san 3 php mysql laravel

我有两个表-第一个表称为“用户”,第二个表称为“ buy_courses”。

用户表

在此处输入图片说明

我正在尝试选择所有不在user_names中的用户。我尝试过-

$users = DB::table('users')
                ->rightjoin('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
                ->get();
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*kow 7

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

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

})->get();
Run Code Online (Sandbox Code Playgroud)

刚刚加盟实际上是在内部加入Laravel所以实际上也许你也可以试试:

DB::table('users')
            ->join('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
            ->get();
Run Code Online (Sandbox Code Playgroud)

  • 联接如何解决该问题,因为它将返回两者共有的行?这不是OP期望的。 (2认同)

ana*_*ojo 5

使用 Eloquent 试试:

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

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

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