基本上我已经在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()
可以修改Auth行为以附加侦察兵,是否会使用Laravel的作曲家更新覆盖它?
答案 0 :(得分:0)
截至2019年5月5日 Laravel Scout没有对Auth用户相关模型进行范围界定查询的方法,因为说实话,这是一个处理起来非常困难的逻辑,尤其是因为关系是任意的并且键可以不同,因此内部或外部构建的范围界定功能将具有计算成本相同,这里没有优化
$results = App\CourtCase::search($request->q)->where('lawyer_id', Auth::id())->get();
这是我解决问题的方法,通过在搜索结果中附加一个where条件,该条件将仅显示与键匹配的详细信息,如果您要修改应用程序的现有代码,请记住,最初的scout可能会显示未显示缓存结果匹配过滤器,这让我感到困惑,直到我刷新代码
欢迎使用更好的代码