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