Hey, j'essaie de faire une recherche en utilisant plusieurs critère donc plusieurs champs, pour le moment je fais un request data du champs et en suite je fais un find avec une conditions where, mais je sens que cettte méthode n'est pas idéale, dans un premier temps je suis obligé de faire la recherche avec au minimum 2 critères.

Je vous poste, ma petite fonction en dessous x)

public function search(){
        $searchEan = $this->request->data['search_ean'];
        $searchPrice1 = $this->request->data['search_priceone'];
        $searchPrice2 = $this->request->data['search_pricetwo'];
        $searchBrand = $this->request->data['search_brand'];
        $searchColor = $this->request->data['search_color'];
        $searchMemo = $this->request->data['search_memo'];
         if ($this->request->is('post')){
            $this->paginate = [
                'contain' => ['Categories', 'Brands', 'Colors', 'Memories'],
                'limit' => 10,
            ];        
            $products = $this->Products->find()
                ->where([
                    'ean' => $searchEan,
                    'OR' => [['Products.brand_id' => $searchBrand], ['Products.color_id' => $searchColor], ['Products.memory_id' => $searchMemo]],
                ]);
            $categories = $this->Products->Categories->find('list', ['limit' => 200]);
            $brands = $this->Products->Brands->find('list', ['limit' => 200]);
            $colors = $this->Products->Colors->find('list', ['limit' => 200]);
            $memories = $this->Products->Memories->find('list', ['limit' => 200]);
            $this->set(compact('categories', 'brands', 'colors','memories'));
            $this->set('products',$this->paginate($this->Products));          
         }

    }

Aucune réponse