1

我正在通过https://packagist.org/packages/babenkoivan/scout-elasticsearch-driver使用 Laravel/Scout/Elasticsearch ,我遇到了这种情况:

  1. 要搜索,我必须使用这样的模型:

    $visits = Visit::search("canada")->with(['origin', 'profile', 'user'])->paginate(10);

它工作得很好。

  1. 如您所见,此模型与其他三个表相关:origins(即国家)、profile 和 users。一切设置的方式,我可以搜索“加拿大”并获得所有来自加拿大的访问,这也很好。
  2. 结果显示在使用 paginate() 的网格中,效果也很好。
  3. 但是,如果我想按 Origins 对网格进行排序——对于我迄今为止阅读和尝试的所有内容——我不能使用这种$model->with(...)方法。相反,我必须使用类似的东西

    $visits = DB::table('visits') ->join('origins', 'origins.id', 'visits.origin_id') ->orderby($sort_column, $sort_az_za) ->paginate(10);

  4. 事情是这样的:search() 不适用于DB::table('visits') 语法,并且 Visit::search("canada")->with(....)... 方法不允许我按不在 Visits 表中的字段进行排序。

问题是:如何按我想要的任何字段搜索和排序结果?

我认为应该可以扩展 Scout 以搜索 DB::table('TABLE') 或尝试直接通过 ES 排序——尽管我更愿意将所有代码绑定到“Laravel 方式”。

如果扩展 DB::table('TABLE') 是一种方法,有人能指出我从哪里开始吗?

除此之外,还有其他想法吗?

4

0 回答 0