У меня проблема с отношениями "один ко многим"! Итак, я пытаюсь суммировать цены на продукты, вот что я имею в виду:
Модель: Product.php
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function orders(){
return $this->hasMany(Order::class);
}
Модель: Orders.php
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function product(){
return $this->belongsTo(Product::class);
}
Итак, я хочу сделать что-то вроде этого: $ var-> product-> price-> sum ();
Моя база данных, если это необходимо:
Заказы:
id product_id|user_id|
|-|----------|-------|
|1|1 |1 |
| | | |
И в продуктах всего 4 столбца: id,name,price,description
Я имею в виду, что:
products:
id\1
name\productname
price \1.00USD
id\2
name\productname2
price \1.00USD
Он должен вернуть сумму всего продукта, поэтому он должен вернуть 2,00 доллара США.
@Jonas Staudenmeir
Да, у меня только один товар в заказе
Что именно вы хотите подвести? Что такое $var?
Если у вас только один продукт, зачем использовать sum? Вы можете попробовать $order->product->price;. Если у вас в заказе есть поле quantity, вы можете умножить цену на него.
хм .. Не могли бы вы мне объяснить, как это будет происходить со многими и многими отношениями?
$var здесь единый заказ?
@apokryfos я просто привожу пример с $ var я хочу сделать всю цену пожертвования с заказами пользователей я просто хочу получить все продукты по идентификатору и суммировать их цены
Вы имеете в виду что-то вроде $user->priceSum?
теперь я имею в виду $ total-> priceSum
Что такое $total?
Послушайте, ребята, я хочу делать ежемесячный оборот, мне нужен только product_id и сумма всех цен на продукты, вы понимаете, что я хочу делать?
$ total - это всего лишь пример того, что я хочу ..
Пожалуйста, опубликуйте образцы данных и ожидаемый результат.
В вашем примере похоже, что вам нужна сумма всех продуктов. Как это связано с заказами?
По id, заказам: id,product_id






попробуйте этот QueryBuilder Query:
DB::table('orders')
->leftJoin('products','orders.product_id','=','products.id')
->where('orders.user_id',Auth::user()->id)
->select('orders.*','products.*',DB::raw("SUM(products.price) as order_total"))
->groupBy('orders.product_id')
->get();
Я найду решение! Так что я делаю это
Я использую текущие отношения, как befor, и делаю эту функцию в своем order.php модель
public function getTotalPrice() {
$orders = self::with('product')->get();
$total = 0;
foreach($orders as $order) {
$total += $order->product->price;
}
return $total;
}
Теперь я могу использовать свою функцию, например obj, и называть ее $var->getTotalPrice();.
Немного короче: $total = $orders->pluck('product')->sum('price');
Использование красноречивых моделей без DB
Product::with(['orders' => function($query){
$query->sum('price');
}])->get();
В Laravel 6+ мы можем использовать вот так, очень просто
$total = $order->product->sum('price');
У вас только один товар в заказе? В противном случае вам может потребоваться связь
many to manyс промежуточной таблицей. Док