Laravel. Сортировка записей одной таблицы, по значениям из связанной таблицы
Есть таблица report_rows, у которой есть колонка production_order_product_instance_id, которая подвязывает таблицу production_order_product_instances, и в этой таблице есть колонка instance_id, которая подвязывает к себе таблицу product_instances, в которой есть колонка serial_number (varchar)
Вопрос заключается в том, как мне отсортировать колонки таблицы report_rows по значению таблицы product_instances
Вот такой подход не работает.
ReportRow::query()
->when(!empty($search['sort_by'] ?? null), function (Builder $query) use ($search) {
switch ($search['sort_by']) {
case 'serial_number':
$query->whereHas('instance.productInstance', function (Builder $query) use ($search) {
$query->orderBy('serial_number', $search['sort_direction'] ?? 'desc');
});
break;
default:
break;
}
});
Фильтровать коллекцию не хочется, хочу сделать в запросе. Есть у кого варианты?
UPD Получилось сделать через join-ы таблиц, и ордер бай по полю. Но хотелось бы отработать вариант с whereHas, чтоб везде было стандартизировано
Ответы (1 шт):
Мое решение
$query
->join('production_order_product_instances', 'production_order_product_instance_id', '=', 'production_order_product_instances.uuid')
->join('product_instances', 'product_instance_id', '=', 'product_instances.uuid')
->orderBy('serial_number', $search['sort_direction'] ?? 'desc');