我正在通过https://packagist.org/packages/babenkoivan/scout-elasticsearch-driver使用 Laravel/Scout/Elasticsearch ,我遇到了这种情况:
要搜索,我必须使用这样的模型:
$visits = Visit::search("canada")->with(['origin', 'profile', 'user'])->paginate(10);
它工作得很好。
- 如您所见,此模型与其他三个表相关:origins(即国家)、profile 和 users。一切设置的方式,我可以搜索“加拿大”并获得所有来自加拿大的访问,这也很好。
- 结果显示在使用 paginate() 的网格中,效果也很好。
但是,如果我想按 Origins 对网格进行排序——对于我迄今为止阅读和尝试的所有内容——我不能使用这种
$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(....)...
方法不允许我按不在 Visits 表中的字段进行排序。
问题是:如何按我想要的任何字段搜索和排序结果?
我认为应该可以扩展 Scout 以搜索 DB::table('TABLE') 或尝试直接通过 ES 排序——尽管我更愿意将所有代码绑定到“Laravel 方式”。
如果扩展 DB::table('TABLE') 是一种方法,有人能指出我从哪里开始吗?
除此之外,还有其他想法吗?