2017-12-28 27 views
0

searcable()メソッドをクエリビルダーから返された結果に使用する方法?クエリービルダーベースの結果でsearchable()を呼び出すと、エラーが発生する

  1. 製品
  2. ベンダー
  3. カテゴリ
  4. vendor_products(製品とベンダーのためのピボットテーブル)
  5. product_categories(製品とカテゴリのピボットテーブル)
:5つの表があると仮定

次のクエリで検索可能を使用する方法はありますか:

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() 

しかしLaravalスカウトリターンエラー:

Call to undefined method Illuminate\Database\Query\Builder::searchable() 

上記のクエリの結果をアップロードする方法はありますか? ベンダー、カテゴリ、および製品モデルで検索可能な特性を追加しました。

スカウトのように見えるのは、Eloquent関係がクエリから返され、クエリビルダーでは機能しない場合のみです。

答えて

1

Laravel Documentation

Laravel Scout provides a simple, driver based solution for adding full-text search to your Eloquent models.

た内容に応じて、クエリビルダは、この機能を持っていません。

代わりに、あなたが実装できる幻想的な解決策は、WHERE LIKEを使用してすべての列を比較することです。これは、Laravel Scopeよりもゆっくりと機能しますが、Eloquentを使用したくない場合は、このトリックを実行できます。

私の推奨するメッセージは、Eloquentです。 laravelを使用してデータベースを処理する方が、より迅速かつ簡単に作業できます。

0

問題は解決され、すべてのクレジットは@kfirbaに送られます。彼の返答をコピーするblog

The searchable() method is only available for Eloquent’s query builder. Try converting your query above to use Eloquent. Change the DB::table(‘products’)->join... to Products::join...

You may need to change the “toSearchableArray()” method implementation to include your new fields that are not part of the Product model (vendor_quantity, vendor_price, etc.)

関連する問題