Выборка максимальных и минимальных значений по отношениям таблиц

Проект на Laravel. Есть таблица orders, фильтр только дата. Мне надо к этой выборке добавить значение из относящейся таблицы operations(отношение один ко многим, в одном order может быть много operations): максимальное значение procentage по строкам с типом penni, минимальное значение debt по строкам с типом credit. И так, в классе модели Order есть методы с отношениями

    public function operations(): HasMany
    {
        return $this->hasMany(Operation::class, 'order_id', 'id');
    }

    public function maxPercentage(): HasOne
    {
        return $this->operations()->one()->ofMany('percentage', 'max')
            ->where('type', 'penni');
    }

    public function initialCredit(): HasOne
    {
        return $this->operations()->one()->ofMany('debt', 'min')
            ->where('type', 'credit');
    }

maxPercentage и initialCredit методы добавил я, использую их при селекте из Order:

            $filtered = Order::filter($filter)
                ->with(['maxPercentage', 'initialCredit'])
                ->selectRaw('orders.*')
                ->limit($limit)
                ->get();

В итоге получаю ошибку

PDOException(code: 42883): SQLSTATE[42883]: Undefined function: 7 ERROR:  function max(uuid) does not exist
LINE 1: ...perations\".* from \"operations\" inner join (select max(\"opera...

Подскажите, что я не так делаю. БД postgresql


Ответы (1 шт):

Автор решения: Denis Sinyukov

Нужно проверить работоспособность на ваших данных.

    $filtered = Order::filter($filter)
                ->selectRaw('orders.*')
                ->selectRaw('MAX(o.percentage) as max_percentage')
                ->selectRaw('MIN(o.percentage) as min_percentage')
                ->join('operations as o', 'o.order_id', 'orders.id')
                ->groupBy('orders.id')
                ->limit($limit)
                ->get();
→ Ссылка