Сортировать элементы по столбцу отношений - PullRequest
0 голосов
/ 09 июня 2018

Я создаю поисковую систему.Это работает очень просто.У меня есть один продукт var - $, и я использую его для построения запросов следующим образом: в начале я написал

$product= Product::where('active', 1)->has('details');

И следующим шагом является расширение этого запроса $ следующим образом

if (strlen($request->name) > 3) {
    $product = $product->where('name', 'like', '%' .$request->name. '%');
}

У меня проблема с результатами сортировки по цене (цена указана в таблице подробностей), я пробовал этот код

$product = $product->with([
    'details' => function($query) {
        $product->orderBy('price', 'asc');
    }
]);

Мои результаты не отсортированы правильно.Почему?

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Для сортировки товаров на основе связанной модели (подробности) вы можете использовать следующие подходы

Использование sortBy() метод сбора

$products = $products->get()
                     ->sortBy(function($product) { 
                            return $product->details->price;
                      });

Или использовать объединение какзаявлено devk

0 голосов
/ 10 июня 2018

Нельзя упорядочить по связанной модели с красноречивыми связями, поскольку они выполняют дополнительный запрос для получения связанных результатов.

Для этого вам необходимо объединение.Что-то вроде:

$product = $product
    ->join('details', 'details.product_id', '=', 'products.id')
    ->select(['products.*', 'details.price'])
    ->orderBy('price');

Объединение, которое я написал, представляет собой обоснованное предположение о том, какими могут быть столбцы / имена вашей таблицы, поскольку из вашего поста невозможно узнать.Возможно, вам придется настроить их так, чтобы они работали на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...