Laravel Scout-哪里不等于



我正在为Laravel Scout构建一个查询。

$subchanResults = Subchan::search($query)
->when($request->input('incl_nsfw'), function ($query, $incl_nsfw) {
if ($incl_nsfw == 0) {
return $query->where('nsfw','!=', 'always');
}
}, function ($query) {
return $query->where('nsfw','!=', 'always');
})          
->paginate(3);

Laravel Scout只允许基本的where子句,不允许任何类型的高级条件子句,所以到目前为止这有点棘手。(文件:https://laravel.com/docs/8.x/scout#where-条款(

我的问题是这条线路:return $query->where('nsfw','!=', 'always');

Scout似乎允许一个简单的where('column','value'),但如果我试图将第三个参数添加到where子句(不相等(中,它就不起作用。

如何使此查询工作?还是在查询后我必须自己手动修剪结果?

我本来希望在Scout内部找到一个变通方法,但现在似乎条件子句对Scout来说完全不可能。以下是我针对相同场景在搜索引擎级别(Merisearch(进行过滤的解决方案:

$subchanResults = Subchan::search($query, function ($meilisearch, $query, $options) use ($request) {
if ($incl_nsfw = $request->input('incl_nsfw')) {
$options['filters'] = 'nsfw != always';
}   
return $meilisearch->search($query, $options);
})->get();

您链接以解释的文档:

Scout允许您添加简单的"其中";子句。目前,这些子句只支持基本的数字相等检查,并且主要用于由所有者ID确定搜索查询的范围。由于搜索索引不是关系数据库,因此更高级的";其中";子句当前不受支持

基本上,当您调用::search时,您不再构建Eloquent ORM查询;您正在构建Scout查询,Scout查询的where方法只接受两个参数:一个键和一个要匹配的值:

https://github.com/laravel/scout/blob/7a8d5b90761e0c102d357dd9e57d8c2f726ceaa5/src/Builder.php#L103-L110

最新更新