如何从一个表中获取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();