Сортировать результат поиска в модели Laravel Eloquent по отношениям - PullRequest
0 голосов
/ 10 октября 2018

Я выполнил поиск по модели (запуск), следующий шаг - упорядочить результаты поиска по DESC или ASC (сейчас это не имеет значения)

Мой текущий код:

$startups = Startup::whereHas('category', function ($query) use ($search, $sort_type) {
            $query

                ->where('name', 'like', "%$search%")
                ->orderBy('name', $sort_type);
        })
            ->orWhere('description', 'LIKE', "%$search%")
            ->orWhere('url', 'LIKE', "%$search%")
            ->get();

        return StartupResource::collection($startups);

Объяснение кода: как вы видите в начале, я использую «whereHas» для поиска совпадений в родственной модели - «Category».затем внутри "whereHas" я пытаюсь применить 'orderBy (' name ', $ sort_type)', но он не работает должным образом (он не сортирует по категориям)

Я знаю, что мы можемсоздать метод в модели запуска и отсортировать его внутри метода, но проблема в том, что мне нужно передать переменные в метод ($ sort_type, $ search), и я не знаю, как это сделать

как отсортировать модель Startups, включая связанную модель Category, по ASC или DESC в моем случае?

Спасибо, ребята, за любые идеи и помощь!

1 Ответ

0 голосов
/ 10 октября 2018

Это невозможно с whereHas().Вы можете использовать JOIN:

$startups = Startup::select('startups.*')
    ->join('category', 'category.id', '=', 'startups.category_id')
    ->where('category.name', 'LIKE', "%$search%")
    ->orWhere('startups.description', 'LIKE', "%$search%")
    ->orWhere('startups.url', 'LIKE', "%$search%")
    ->orderBy('category.name', $sort_type)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...