Laravel雄辩和关系数量和groupby 产品表: 产品学分表: 我想做的是:

Laravel雄辩和关系数量和groupby 产品表: 产品学分表: 我想做的是:,laravel,eloquent,Laravel,Eloquent,我正在努力获取所有产品的数量 预期数据: 获取以下信息: 产品名称=第一个产品 产品数量=30 模型关系代码: 这段关系很好 我所尝试的: 我试着在雄辩的语言中使用和函数 public function exportProductsCredit(Request $request) { // GET THE COLLECTION $products = Product::with(['credits' => function ($query) { $que

我正在努力获取所有产品的数量

预期数据: 获取以下信息:

  • 产品名称=第一个产品
  • 产品数量=30
模型关系代码: 这段关系很好

我所尝试的: 我试着在雄辩的语言中使用
函数

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\u credits.id'不在GROUP BY

编辑
问题是我有
Mutator
字段,我想显示这些字段,例如,我计算作为Mutator返回的
product\u net\u price

如果您想将其作为属性,请不要尝试像查询关系一样构建它

您可以在
Product::class

public function getSumCreditsAttribute()
{
    return $this->credits->where('quantity', '>', 1)->sum('quantity');
}
$products = Product::get();
foreach ($products as $product) {
    var_dump($product->sum_credits);
}
您还可以始终使用
appends
属性加载它

protected $appends = ['sum_credits'];
或者在您有
Product::class

public function getSumCreditsAttribute()
{
    return $this->credits->where('quantity', '>', 1)->sum('quantity');
}
$products = Product::get();
foreach ($products as $product) {
    var_dump($product->sum_credits);
}

因为我们无法使用模型实现即时分组和聚合。您需要使用以下方法

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();

希望这对您有所帮助。

这是一个很好的解决方案,但每当我调用
产品
模型时,它都会返回
总积分
对吗?我不想这样this@Danny如果您没有将
sum\u credits
放入$append属性,则在您尝试通过
->sum\u credits
访问它之前,不会加载它。您可以使用
dd('product')
验证这一点。这是一个很好的解决方案,它将在所有即将发布的报告中帮助我。谢谢它抛出了一个错误说
quantity.id列未找到
我已将其更改为
quantity
但仍然不工作我正在尝试使用
Mutator
在我的eloquent中添加字段,但我面临一个问题,每当我调用
产品
模型时,它都会返回Mutator字段不返回我想显示的mutator字段。就我在本地测试的情况而言。我可以在控制器和视图中访问这些变异。
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();