如何使用 laravel 查询生成器编写此查询?



我有两个表ordersordered_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();

最新更新