Как пользоваться searcable()
метод на результаты, возвращаемые построителем запросов? Предположим, есть пять таблиц:
Есть ли способ использовать searchable по следующему запросу:
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()
Но ошибка разведчика Ларавала:
Call to undefined method Illuminate\Database\Query\Builder::searchable()
Есть ли способ загрузить результаты вышеупомянутого запроса?
Я добавил поисковую черту в отношении поставщиков, категорий и моделей товаров.
Похоже, что Scout работает только тогда, когда мы возвращаем отношение Eloquent из запроса и не работаем в построителе запросов.
В соответствии с Документация Laravel
Laravel Scout предоставляет простое, основанное на драйвере решение для добавления полнотекстового поиска к вашему Красноречивые модели.
Query Builder не имеет этой функциональности.
Вместо этого, вы можете реализовать не очень интересное решение — сравнить каждый столбец, используя WHERE LIKE
, Это предполагает более медленную функциональность, чем Laravel Scope
но может сделать свое дело, если вы не хотите использовать Eloquent
,
Моя рекомендация заключается в использовании Eloquent
, Это более быстрый и простой способ работы с базами данных при использовании laravel
Проблема решена, весь кредит переходит к @kfirba. Копирование его ответа от его блог
Метод searchable () доступен только для построителя запросов Eloquent. Попробуйте преобразовать свой запрос выше, чтобы использовать Eloquent. Измените DB :: table (‘products’) -> join … на Products :: join …
Возможно, вам придется изменить реализацию метода «toSearchableArray ()», чтобы включить новые поля, которые не являются частью модели Product (vendor_quantity, vendor_price и т. Д.)