Вызов searchable () для результата на основе Query Builder выдает ошибки

Как пользоваться searcable() метод на результаты, возвращаемые построителем запросов? Предположим, есть пять таблиц:

  1. товары
  2. поставщики
  3. категории
  4. vendor_products (сводная таблица для продуктов и поставщиков)
  5. product_categories (сводная таблица для продуктов и категорий)

Есть ли способ использовать 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 из запроса и не работаем в построителе запросов.

0

Решение

В соответствии с Документация Laravel

Laravel Scout предоставляет простое, основанное на драйвере решение для добавления полнотекстового поиска к вашему Красноречивые модели.

Query Builder не имеет этой функциональности.

Вместо этого, вы можете реализовать не очень интересное решение — сравнить каждый столбец, используя WHERE LIKE, Это предполагает более медленную функциональность, чем Laravel Scope но может сделать свое дело, если вы не хотите использовать Eloquent,

Моя рекомендация заключается в использовании Eloquent, Это более быстрый и простой способ работы с базами данных при использовании laravel

1

Другие решения

Проблема решена, весь кредит переходит к @kfirba. Копирование его ответа от его блог

Метод searchable () доступен только для построителя запросов Eloquent. Попробуйте преобразовать свой запрос выше, чтобы использовать Eloquent. Измените DB :: table (‘products’) -> join … на Products :: join …

Возможно, вам придется изменить реализацию метода «toSearchableArray ()», чтобы включить новые поля, которые не являются частью модели Product (vendor_quantity, vendor_price и т. Д.)

1

По вопросам рекламы [email protected]