Laravel - Mysql Where Not In join


Laravel - Mysql Where Not In join

我有三个表即users, galleries, orders。结构简单。galleriesorders都有一个名为client_id的列作为users的外键我需要一个结果集,其中仅包含galleries中存在但不包含ordersusers列表。我试着遵循,但它给了我所有的用户都存在于orders

$users  =   DB::table('galleries')
        ->join('users', 'users.id', '=', 'galleries.client_id')
        ->join('orders', 'orders.client_id', '=', 'users.id')
        ->select('galleries.client_id', 'galleries.path', 'users.first_name', 'users.last_name', 'orders.order_number')
        ->where('galleries.session_id', null)
        ->where('galleries.is_video', '1')
        ->where('galleries.is_thumb', '0')
        ->get();
    dd($users);
上面代码生成的查询是
    select
  `galleries`.`client_id`,
  `galleries`.`path`,
  `users`.`first_name`,
  `users`.`last_name`,
  users.id,
  `orders`.`order_number`
from
  `galleries`
  inner join
  `users`
    on
      `users`.`id` = `galleries`.`client_id`
    inner join
    `orders`
      on
        `orders`.`client_id` = `users`.`id`
where
  `galleries`.`session_id` is null
  and
  `galleries`.`is_video` = '1'
  and
  `galleries`.`is_thumb` = '0'

这个怎么样?不确定是否有效:

DB::table('galleries')
    ->join('users', 'users.id', '=', 'galleries.client_id')
    ->select('galleries.client_id', 'galleries.path',
             'users.first_name', 'users.last_name')
    ->where('galleries.session_id', null)
    ->where('galleries.is_video', '1')
    ->where('galleries.is_thumb', '0')
    ->whereNotIn('client_id', function($query) {
        $query->select('client_id')
              ->from('orders');
    })
    ->get();

我已经删除了orders.order_number,因为根据你的要求,你提到选择那些用户没有订单的画廊。如果客户没有订单,如何加入订单?

我只是提供了一个额外的whereNotIn,它读作"client_id不存在于订单表中"