Выборка максимальных и минимальных значений по отношениям таблиц
Проект на 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();