2017-12-28 30 views
0

쿼리 작성기에서 반환 한 결과에 searcable() 메서드를 사용하는 방법?쿼리 작성기 기반 검색 결과에서 검색 가능한()을 호출하면 오류가 발생합니다.

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