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, которые я возвращаю как мутатор.






Если вы хотите, чтобы это было атрибутом, не пытайтесь запросить его как отношение.
вы можете объявить такой атрибут в 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);
}
@ Дэнни, если вы не поместите sum_credits в атрибут $append, он не будет загружен, пока вы не попытаетесь получить к нему доступ через ->sum_credits. вы можете проверить это с помощью dd('product').
Это хорошее решение, и оно поможет мне во всех предстоящих отчетах. Спасибо
Поскольку мы не можем добиться группировки и агрегирования из коробки с помощью модели. Вам нужно использовать следующий способ
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();
Надеюсь, это поможет вам.
Выдает ошибку quantity.id column not found Я изменил на quantity но все равно не работает
Я пытаюсь использовать Mutator для добавления полей в свой красноречивый, но сталкиваюсь с проблемой, когда всякий раз, когда я вызываю модель Product, она возвращает поля мутатора.
Также ваше решение не возвращает поля мутатора, которые я хочу показать.
Насколько я тестировал в локалке. Я могу получить доступ к этим мутаторам как в контроллере, так и в поле зрения.
Это хорошее решение, но всякий раз, когда я вызываю модель
Product, она возвращает с нейsum_credits, верно? Я не хочу, чтобы это было так