Laravel 5.5 / Scout:如何扩展Scout以使用连接?

时间:2017-11-12 19:09:42

标签: php laravel elasticsearch relationship laravel-scout

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

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

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

  2. 效果很好。

    1. 如您所见,此模型与其他三个表相关:起源(即国家/地区),个人资料和用户。一切都设置的方式,我可以搜索“加拿大”并获得来自加拿大的所有访问,这也很好。
    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表中的字段进行排序。

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

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

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

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

0 个答案:

没有答案