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

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

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

Есть ли способ использовать поиск по следующему запросу:

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


person hhsadiq    schedule 28.12.2017    source источник


Ответы (2)



Проблема решена, все заслуги принадлежат @kfirba. Копирую свой ответ из своего блога.

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

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

person hhsadiq    schedule 28.12.2017