如何对查询构建器返回的结果使用searcable()
方法?假设有五个表:
有没有办法在以下查询中使用搜索:
return \DB::table("products")
->join('vendor_products', function ($join) {
$join->on('products.id', '=', 'vendor_products.product_id')
->MANY_OTHER_WHERE_CONDITIONS
})
->join('categories', function ($join) {
$join->on('category_id', '=', 'categories.id');
})
->MANY_OTHER_CONDITIONS
->searchable()
但是Laravel Scout返回错误:
Call to undefined method Illuminate\Database\Query\Builder::searchable()
有没有办法上传上述查询的结果? 我在供应商,类别和产品模型上添加了可靠性特征。
看起来Scout仅在我们从查询返回Eloquent关系时才起作用,并且不适用于查询构建器。
答案 0 :(得分:1)
Laravel Scout提供了一个基于驱动程序的简单解决方案,用于向 Eloquent models 添加全文搜索。
“查询”构建器没有此功能。
相反,您可以实现的非常有用的解决方案是使用WHERE LIKE
比较每一列。假设功能比Laravel Scope
更慢,但如果您不想使用Eloquent
,则可以执行此操作。
我的推荐是使用Eloquent
。使用laravel
答案 1 :(得分:1)
问题已解决,所有功劳归于@kfirba。从他的blog
复制他的回复searchable()方法仅适用于Eloquent的查询构建器。尝试将上面的查询转换为使用Eloquent。将DB :: table('products') - > join ...更改为Products :: join ...
您可能需要更改“toSearchableArray()”方法实现,以包含不属于产品型号的新字段(vendor_quantity,vendor_price等)