如何在 laravel 中的子查询中求和
how to sum in subquery in laravel
我想在 addselect() 函数中求和,但它显示错误。
我有 2 个模型,如下所示:
1.jewelItem 型号:
protected $table = 'jewel_items';
public function buyInvoice(){
return $this->belongsTo(BuyInvoice::class,'buy_invoice_id');
}
2.buyInvoice 型号:
protected $table = 'buy_invoices';
public function jewelsItems(){
return $this->hasMany(JewelsItems::class);
}
并且每个 jewelItem 都有重量列。
我的查询:
$buyInvoice=BuyInvoice::addSelect(['allWeight'=>JewelsItem::whereColumn('buy_invoices.id','buy_invoice_id')->sum('weight')
])->get();
但它向我显示此错误:
Column not found: 1054 Unknown column 'buy_invoices.id' in 'where clause' (SQL: select sum(`weight`) as aggregate from `jewel_items` where `buy_invoices`.`id` = `buy_invoice_id`)
我如何在不使用 Raw 方法的情况下解决这个问题,因为 here 说“原始语句将作为字符串注入到查询中”并且它很容易受到攻击。
您忘记在此子查询中使用连接
JewelsItem::whereColumn('buy_invoices.id','buy_invoice_id')->sum('weight')
在较新版本的 laravel 中,您可以使用 withSum
获取相关 jewelsItems
的权重总和
$buyInvoice=BuyInvoice::withSum('jewelsItems', 'weight')
->orderBy('jewelsItems_sum_weight')
->get();
或者在旧版本中,您可以使用 withCount
求和为
$buyInvoice= BuyInvoice::withCount([
'jewelsItems as allWeight' => function ($query) {
$query->select(DB::raw("sum(weight)"));
}
])->orderBy('allWeight')
->get();
Laravel
没有执行自定义计数子查询,而是使用方法 withSum()
来执行此操作的语法糖。一个例子可能是。
$data = Model::query()->withSum('relation.subRelation','weight')->get();
我想在 addselect() 函数中求和,但它显示错误。 我有 2 个模型,如下所示:
1.jewelItem 型号:
protected $table = 'jewel_items';
public function buyInvoice(){
return $this->belongsTo(BuyInvoice::class,'buy_invoice_id');
}
2.buyInvoice 型号:
protected $table = 'buy_invoices';
public function jewelsItems(){
return $this->hasMany(JewelsItems::class);
}
并且每个 jewelItem 都有重量列。 我的查询:
$buyInvoice=BuyInvoice::addSelect(['allWeight'=>JewelsItem::whereColumn('buy_invoices.id','buy_invoice_id')->sum('weight')
])->get();
但它向我显示此错误:
Column not found: 1054 Unknown column 'buy_invoices.id' in 'where clause' (SQL: select sum(`weight`) as aggregate from `jewel_items` where `buy_invoices`.`id` = `buy_invoice_id`)
我如何在不使用 Raw 方法的情况下解决这个问题,因为 here 说“原始语句将作为字符串注入到查询中”并且它很容易受到攻击。
您忘记在此子查询中使用连接
JewelsItem::whereColumn('buy_invoices.id','buy_invoice_id')->sum('weight')
在较新版本的 laravel 中,您可以使用 withSum
获取相关 jewelsItems
$buyInvoice=BuyInvoice::withSum('jewelsItems', 'weight')
->orderBy('jewelsItems_sum_weight')
->get();
或者在旧版本中,您可以使用 withCount
求和为
$buyInvoice= BuyInvoice::withCount([
'jewelsItems as allWeight' => function ($query) {
$query->select(DB::raw("sum(weight)"));
}
])->orderBy('allWeight')
->get();
Laravel
没有执行自定义计数子查询,而是使用方法 withSum()
来执行此操作的语法糖。一个例子可能是。
$data = Model::query()->withSum('relation.subRelation','weight')->get();