如何从一个表中获取Laravel 5.8中不存在于另一个表中的所有记录

如何从一个表中获取Laravel 5.8中不存在于另一个表中的所有记录,laravel,Laravel,我想从一个表中选择另一个表中不存在的所有记录(存在于reserved\u shop表中的记录,而不存在于shop\u payment) 下面的查询获取shop\u payment表中存在的所有记录,因此如何根据需要更改此查询 $shopPayment = \DB::table('shop_payment as p') ->join('market', 'market.market_id', '=', 'p.market_id') ->join('customer',

我想从一个表中选择另一个表中不存在的所有记录(存在于
reserved\u shop
表中的记录,而不存在于
shop\u payment

下面的查询获取
shop\u payment
表中存在的所有记录,因此如何根据需要更改此查询

$shopPayment = \DB::table('shop_payment as p')
    ->join('market', 'market.market_id', '=', 'p.market_id')
    ->join('customer', 'customer.customer_id', 'p.customer_id')
    ->join('reserved_shop','reserved_shop.market_id','=','p.market_id')
    ->select('market.name as mn', 'p.shop_payment_id', 'p.floor_number', 
        'p.shop_number', 'p.shop_hire', 'p.payment_amount', 'p.borrow', 
        'p.month', 'p.date', 'customer.name')
    ->where('market.market_id', '=', $id)
    ->where('p.month', '=', $month)
    ->whereYear('p.date', '=', $year)
    ->groupBy('mn', 'p.shop_payment_id', 'p.floor_number', 'p.shop_number', 
        'p.shop_hire', 'p.payment_amount', 'p.borrow', 'p.month', 'p.date',
        'customer.name')
    ->where('p.status', '!=', 1)->get();

向DB发出附加请求的第一个变体:

$existingIds = DB::table('payment')->get()->pluck('market_id')->toArray();
//then add to your builder
->whereNotIn('p.market_id', $existingIds)
具有原始sql和子查询的第二个变量:

->whereRaw('p.market_id NOT IN (SELECT market_id FROM payment)')
第三个(与第二个相同,但使用查询生成器):

UPD

$shopPayment = \DB::table('shop_payment as p')
            ->join('market', 'market.market_id', '=', 'p.market_id')
            ->join('customer', 'customer.customer_id', 'p.customer_id')
            ->join('reserved_shop','reserved_shop.market_id','=','p.market_id')
            ->select('market.name as mn', 'p.shop_payment_id', 'p.floor_number', 'p.shop_number', 'p.shop_hire', 'p.payment_amount', 'p.borrow', 'p.month', 'p.date',
                'customer.name')
            ->where('market.market_id', '=', $id)
            ->where('p.month', '=', $month)
            ->whereYear('p.date', '=', $year)
            ->groupBy('mn', 'p.shop_payment_id', 'p.floor_number', 'p.shop_number', 'p.shop_hire', 'p.payment_amount', 'p.borrow', 'p.month', 'p.date',
                'customer.name')
            ->where('p.status', '!=', 1)
            ->whereNotIn('p.market_id', function($q){
                 $q->select('market_id')->from('payment');
            })->get();

如何在这些表中找到相等的记录?他们有相同的id还是其他什么?@V-K是的,他们有,市场id在表中是相同的谢谢你的回答,你能纠正完整的问题吗?!看,我想选择那些不在商店付款的数据,不是付款,实际上没有任何付款表
$shopPayment = \DB::table('shop_payment as p')
            ->join('market', 'market.market_id', '=', 'p.market_id')
            ->join('customer', 'customer.customer_id', 'p.customer_id')
            ->join('reserved_shop','reserved_shop.market_id','=','p.market_id')
            ->select('market.name as mn', 'p.shop_payment_id', 'p.floor_number', 'p.shop_number', 'p.shop_hire', 'p.payment_amount', 'p.borrow', 'p.month', 'p.date',
                'customer.name')
            ->where('market.market_id', '=', $id)
            ->where('p.month', '=', $month)
            ->whereYear('p.date', '=', $year)
            ->groupBy('mn', 'p.shop_payment_id', 'p.floor_number', 'p.shop_number', 'p.shop_hire', 'p.payment_amount', 'p.borrow', 'p.month', 'p.date',
                'customer.name')
            ->where('p.status', '!=', 1)
            ->whereNotIn('p.market_id', function($q){
                 $q->select('market_id')->from('payment');
            })->get();