2016-09-15 1 views
0

私は名前、説明、およびまた、キーワードによる検索になり、製品の検索を持っている...クエリ - Laravel5

次のように、これらの項目が含まれている3つの列があります。 名前、説明はしてキーワード

私の製品の検索クエリを検索すると、いくつかの製品のリストが返されますが、そのうちのいくつかは、すべての要件を満たしていないためにリストされていません....クエリの後に続きます:

マイアクション:

public function search($data) 
{ 
    $products = $this->queryProductsAvailable() 
         ->where('produtos.nome', 'like', '%'.$data.'%') 
         ->orWhere('produtos.descricao', 'like', '%'.$data.'%') 
         ->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%') 
         ->limit($this->_limitProducts) 
         ->orderBy('fornecedores.plano_id', 'DESC') 
         ->get(); 

    $this->savePrint($products); 

    // $categories = $this->setCategories(); 

    return view('Catalogo.search', [ 
       'products' => $products, 
       'searchTerm' => $data 
      ] 
     ); 
} 


private function queryProductsAvailable() 
{ 
    return Products::join('fornecedores', 'fornecedores.id', '=' ,'produtos.fornecedor_id') 
         ->where('fornecedores.ativo', 1) 
         ->where('produtos.moderacao', "P") 
         ->where('produtos.ativo' , true) 
         ->where('produtos.preco_min', '>', 0) 
         ->select('produtos.*'); 
         // ->limit($this->_limitProducts); 
} 

クエリが実行されるクエリに暗黙であるにもかかわらず= 1とprodutos.ativo = 1(真)

をfornecedor.ativoされるべき「productsAvailable」の規格にない製品を戻されor節のために無視されます。

私の疑問は、このorWhereを使用しないで、どのようにして私のクエリが製品名、説明、およびキーワードを検索するのかです。

要するに、関数productsAvailableの条件を無視せずに、列名、説明、およびキーワードで製品を取得するにはどうすればよいですか?あなたが使用する必要があります

$products = $this->queryProductsAvailable() 
        ->where('produtos.nome', 'like', '%'.$data.'%') 
        ->orWhere('produtos.descricao', 'like', '%'.$data.'%') 
        ->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%') 
        ->limit($this->_limitProducts) 
        ->orderBy('fornecedores.plano_id', 'DESC') 
        ->get(); 

答えて

2

代わりの

$products = $this->queryProductsAvailable() 
    ->where(function($q) use ($data) { 
     $q->where('produtos.nome', 'like', '%'.$data.'%') 
      ->orWhere('produtos.descricao', 'like', '%'.$data.'%') 
      ->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%') 
    })->limit($this->_limitProducts) 
    ->orderBy('fornecedores.plano_id', 'DESC') 
    ->get(); 

をクエリ

+0

にブラケットを追加する場所の条件が追加に包まれたご覧のようにありがとうございます! 私はもう一度昼食を試します – Dayglor

+0

それは働いた!ありがとうございました! どこでこの機能について読むことができる記事ですか?私はそれについてもっと学びたいと思います。 – Dayglor

+0

@Dayglor開始するには、Laravelのドキュメントが最適です。条件グルーピングが具体的に扱われる場所[ここ](https://laravel.com/docs/5.3/queries#parameter-grouping) – patricus

関連する問題