Larvel Scout的范围仅限于通过Auth :: user()登录的用户|问题或技术错误

时间:2019-05-05 06:38:52

标签: laravel laravel-authorization laravel-scout

基本上我已经在TNT Search中安装了Laravel Scout,所有配置都是正确的并且可以正常工作,我什至还拥有一个不错的搜索栏来处理ajax工作流

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

这些模型通过口才关系进行关联,当通过<body> <div class="body"> <div class="firstlayout"> <header> <div class="menu-toggle" id="hamburger"> <i class="fas fa-bars"></i> </div> <div class="overlay"></div> <nav> <img src="img/logo2.png" alt="Logo" class="logo"> <ul> <li><a href="#">Home</a></li> <li><a href="#">Services</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> </ul> <div class="menu"> <a href="#" class="btn">Contact</a> <a href="#" class="btn btninfo">Info</a> </div> </nav> </header> <div class="content"> <h1 class="possible">Everything is Possible</h1> <h2 class="possible2">"as long as you put your mind to it and put the work and time into it"</h2> <a href="#about"><img class="arrow" src="img/arrow.svg" alt="Down arrow"></a> </div> </div> </div> <div id="about" class="about"> <h1 class="jury"><span>Hi!</span>, I'm Jury Gregorio</h1> <div class="rectangle"><br></div> </div> </body>方法正常访问时它们可以工作,但是通过Auth::user()示例,侦察搜索似乎未附加到任何模型上:

Auth::user()

上面的方法有效,但是将返回模型(和基础表)中的任何结果,而无需考虑记录是否为已登录用户或与用户相关。

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

我得到的错误如下

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

很明显,这是因为Laravel Scout未附加或无法通过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 方法使用,我可以编写代码以在返回结果之后过滤结果,但是可以想象结果在被用户确定范围之前是开销很大的,似乎浪费了所有查询,是否有一种方法可以让用户使用范围,然后使用类似于Auth::user()

的Laravel Scout搜索

可以修改Auth行为以附加侦察兵,是否会使用Laravel的作曲家更新覆盖它?

1 个答案:

答案 0 :(得分:0)

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

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

这是我解决问题的方法,通过在搜索结果中附加一个where条件,该条件将仅显示与键匹配的详细信息,如果您要修改应用程序的现有代码,请记住,最初的scout可能会显示未显示缓存结果匹配过滤器,这让我感到困惑,直到我刷新代码

欢迎使用更好的代码

相关问题