Я использую Laravel / Scout / Elasticsearch через https://packagist.org/packages/babenkoivan/scout-elasticsearch-driver и у меня такая ситуация
Для поиска я должен использовать такую модель:
$visits = Visit::search("canada")->with(['origin', 'profile', 'user'])->paginate(10);
Это работает очень хорошо.
Однако, если я хочу отсортировать сетку по происхождению — для всего, что я прочитал и пробовал до сих пор — я не могу использовать $model->with(...)
подход. Вместо этого я должен использовать что-то вроде
$visits = DB::table('visits')
->join('origins', 'origins.id', 'visits.origin_id')
->orderby($sort_column, $sort_az_za)
->paginate(10);
Это то, что search () не будет работать с DB::table('visits')
синтаксис и
Visit::search("canada")->with(....)...
Подход не позволяет мне сортировать по полю, которого нет в таблице посещений.
Вопрос заключается в следующем: как я могу искать и сортировать результаты по любому полю, который я хочу?
Я подумал, что должно быть возможно расширить Scout для поиска в DB :: table (‘TABLE’) или попытаться сортировать напрямую через ES — хотя я бы предпочел оставить весь код привязанным к «пути Laravel».
Если расширение DB :: table (‘TABLE’) является способом, может кто-нибудь указать мне, с чего начать?
Кроме этого, есть еще идеи?
Задача ещё не решена.
Других решений пока нет …