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 шт):

Автор решения: adobrovolsky

Мое решение

 $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');
→ Ссылка