0

基本上我已经安装了带有 TNT 搜索的 Laravel Scout,所有的配置都是正确的并且它们工作,我什至有一个很好的搜索栏来使用 ajax 工作流程

但是模型的结果来自整个数据库集合,我的要求只是显示当前登录会话的用户创建的记录记录的结果

这些模型通过 Eloquent 关系关联,它们在通过该Auth::user()方法正常访问时工作,但侦察搜索似乎没有通过Auth::user()示例附加到任何模型:

App\CourtCase::search($request->q)->get();

以上工作,但将返回模型(和基础表)中的任何结果,而不考虑记录是否拥有或与登录的用户相关。但是我的意图是

Auth::user()->courtcase()->search($request->q)->get();

我得到的错误如下

message Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::search()
exception   BadMethodCallException
file    /home/vagrant/code/legistant/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php

显然这是因为 Laravel Scout 没有通过该Auth::user()方法附加或可用,我可以编写代码在返回结果后过滤结果,但想象一下结果在用户范围之前的开销,这似乎是对所有查询的浪费,有没有办法限制用户,然后使用类似的 Laravel 侦察搜索Auth::user()

可以修改 Auth 行为以附加侦察,它会被 Laravel 的作曲家更新覆盖吗?

4

1 回答 1

0

因此,截至 2019 年 5 月 5 日,Laravel Scout 没有对 Auth 用户相关模型进行范围查询的方法,因为老实说,这是一个非常难以处理的逻辑,特别是因为关系是任意的并且键可以不同,范围界定内部或外部构建的函数将具有相同的计算成本,这里没有优化

$results = App\CourtCase::search($request->q)->where('lawyer_id', Auth::id())->get();

这就是我解决它的方法,通过将 where 条件附加到搜索结果,它只会显示与键匹配的详细信息,如果您正在修改应用程序的现有代码,请记住最初 scout 可能会显示与过滤器不匹配的缓存结果,这让我很困惑,直到我刷新了代码

欢迎更好的代码

于 2019-05-05T10:22:09.737 回答