在 Laravel 中,你可以使用 Eloquent ORM 或 Query Builder 来执行子查询求和。以下是两种方法的示例:
假设我们有两个模型 Order 和 OrderItem,一个订单有多个订单项,我们想要计算某个订单的所有订单项的总金额。
首先,定义模型关系:
// Order.php
class Order extends Model
{
public function items()
{
return $this->hasMany(OrderItem::class);
}
}
// OrderItem.php
class OrderItem extends Model
{
public function order()
{
return $this->belongsTo(Order::class);
}
}然后,你可以这样计算总金额:
$order = Order::find(1); // 假设我们要查询订单ID为1的订单
$totalAmount = $order->items->sum('amount');如果你不想使用 Eloquent ORM,也可以直接使用 Query Builder 来实现子查询求和:
$subQuery = DB::table('order_items')
->selectRaw('order_id, SUM(amount) as total_amount')
->groupBy('order_id');
$totalAmount = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))
->mergeBindings($subQuery)
->where('order_id', 1) // 假设我们要查询订单ID为1的订单
->pluck('total_amount')
->first();items 方法返回订单的所有订单项。sum('amount') 方法计算所有订单项的总金额。DB::table 创建子查询。selectRaw 和 groupBy 用于计算每个订单的总金额。mergeBindings 确保子查询的绑定参数被正确合并。where 和 pluck 获取特定订单的总金额。通过以上方法,你可以在 Laravel 中轻松实现子查询求和,并根据具体需求进行优化和调整。