Подсчет данных из таблицы со связями М-М mysql

225
19 сентября 2018, 06:30

Приложение на Laravel 5.6.

Есть таблицы orders, products, order_products. В таблице order_products есть поля order_id, product_id, price, count. Вопрос: каким образом я могу получить список заказов (Orders) с их суммами через Eloquent?

Базовые отношения прописаны:

class Order extends Model
{
  public function products() {
       return $this->belongsToMany('App\Product', 'order_products')
                   ->withPivot('count', 'price', 'amount');
   }
}
class OrderProduct extends Model
{
    public function product() {
        return $this->belongsTo('App\Product');
    }
    public function order() {
        return $this->belongsTo('App\Order');
    }
}
Answer 1

Если реализовать ваш запрос на sql, то получится что-то вроде:

select * from orders join (
    select order_id, sum(price) * count as sum from order_products group by order_id
) op on orders.id = op.order_id

Это можно реализовать с помощь Order::query() и join(), но это будет сильно влиять на производительность и, в случае, если вы захотите использовать пагинацию, то, для оптимизации, в подзапрос нужно будет вставить where order_id IN (order1, order2, .., orderN), перед этим выполнив ещё один запрос, получающий id заказов.

Это не очень оптимальный подход, вариантом будет добавление ещё одного поля total_sum в orders, в которое будет записываться сумма всего заказа при добавлении или удалении товаров.

Answer 2
$orders = Order::leftJoin('order_products', 'order_products.order_id', '=', 'orders.id')
     ->select('orders.*', DB::raw( 'sum( order_products.price * order_products.count) as `total`' ) )
     ->groupBy('orders.id')
     ->orderBy('total', 'DSC')
     ->get();
READ ALSO
PHP DateTime локальное время

PHP DateTime локальное время

Подскажите как установить локальное время в библиотеке DateTime

204
WordPress виджет сохранение значения select

WordPress виджет сохранение значения select

Значения в Select (вижете) считываются с файлаjson

200
Вывод картинки в браузер из папки PHP

Вывод картинки в браузер из папки PHP

Вывожу картинку из папки в браузер

192