我有两个表orders
和ordered_items
订单
Id | quantity
ordered_items
order_id | product_id
我想查询订单数量等于ordered_items数量的所有订单。
我可以使用原始查询来做到这一点,但我想使用 laravel 查询生成器编写此查询。我怎样才能做到这一点。
SELECT *
FROM orders
WHERE quantity = (
SELECT COUNT(*)
FROM ordered_items
WHERE ordered_items.order_id = orders.ID)
你必须使用关系查询
在您的订单中 型号
public function orderedItems(){
return $this->hasMany(OrderedItem::class);
}
在已订购项模型中
public function order(){
return $this->belongsTo(Order::class);
}
在您的控制器中 此处的等效代码
$order = Order::find($id);
$order->orderedItems()->count();
你可以这样做:
$values=DB::table('orders')->where('orders.quantity','=',
DB::raw("SELECT COUNT(*) FROM ordered_items WHERE ordered_items.order_id = orders.ID"))->get();
或者采用联接子查询方式加入子查询方式:
从数量 = 的订单中选择 * ( 从中选择计数 ( * ( ordered_items 其中 ordered_items.order_id = orders.ID(
你可以把它分成两部分...
$ordered_items_counts=DB::table('ordered_items')->selectRaw('order_id,count(*) as orders_count')->groupBy('order_id');
$values=DB::table('orders')->joinSub($ordered_items_counts,'ordered_items_counts',function($join){
$join->on('orders.id', '=', 'ordered_items_count.order_id');
})->whereRaw('ordered_items_counts.orders_count=orders.quantity')->get();
如果你有具有正确关系的模型,事情应该更容易:
$values = Order::withCount('orderedItems')
->havingRaw('orderedItems_count=quantity')
->get();