id name
1 first product
id product_id quantity
1 1 10
2 1 20
我正在尝试获取所有 产品数量 。
获取:
public function credits () {
return $this -> hasMany('App\Models\Product\ProductCredits')
-> whereHas('importInvoice', function ($query) {
$query->where('deleted_at', null);
}) -> orderBy('created_at', 'ASC') -> orderBy('quantity', 'DESC');
}
这种关系很好。
我尝试过雄辩地使用with
函数。
public function exportProductsCredit(Request $request) {
// GET THE COLLECTION
$products = Product::with(['credits' => function ($query) {
$query -> where('quantity', '>', 1) -> groupBy('product_id') -> sum('quantity');
}]) -> get();
return $products;
}
但是它抛出错误:product_credits.id' isn't in GROUP BY
问题是我有Mutator
字段要显示,例如,我计算了product_net_price
,并将其作为增变器返回。
答案 0 :(得分:1)
如果您希望将其作为属性,请不要尝试像建立关系那样查询构建。
您可以在Product::class
public function getSumCreditsAttribute()
{
return $this->credits->where('quantity', '>', 1)->sum('quantity');
}
您还可以始终使用appends
属性加载它
protected $appends = ['sum_credits'];
或在您拥有Product::class
实例时访问它
$products = Product::get();
foreach ($products as $product) {
var_dump($product->sum_credits);
}
答案 1 :(得分:0)
由于我们无法使用模型来实现分组和聚合。您需要使用以下方式
Product::join('product_credits as pc', 'products.id', '=', 'pc.product_id')
->select('products.id', 'products.name', DB::raw("SUM(pc.quantity) as 'product_quantity'"))
->with('credits')
->where('pc.quantity', '>', 1)
->groupBy('pc.product_id')
->get();
希望这对您有所帮助。