2010-01-04 2 views
0

У меня есть поле выбора с именем производителя, которое отображается правильно, даже кликабельное для многократного поиска. Когда я запускаю поиск, я не получаю никаких результатов из своей базы данных, используя сложные условия поиска, которые я установил. Я пытался использовать Complex-Find-Conditions из пекарни и других различных веб-сайтов, но безрезультатно.CakePHP, Установка сложного/множественного условия поиска для окна многократного выбора

//This my index.ctp 
<?=$form->create('ManufacturersProductsLine', array('action'=>'index'));?> 
    <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td> 
       <?=$f->label('ManufacturersProductsLine.manufacturer_id', 'Manufacturer Name:'); ?> 
       <?=$f->select('ManufacturersProductsLine.manufacturer_id', $manufacturers, null, array('multiple'=>'multiple', 'style'=>'height:100px;'))?> 
      </td> 
      <td> 
       <?=$f->label('ManufacturersProductsLine.name', 'Product Name:'); ?> 
       <?=$f->text('ManufacturersProductsLine.name', array('style'=>'width:140px;'));?> 
      </td> 
      <td> 
       <label></label> 
       <input name="Search" class="blue" type="submit" value="Search Product Lines" /> 
      </td> 
     </tr> 
    </table> 

Прокомментировано, что я пытался в своем контроллере установить несколько условий поиска.

//This is my manufacturers_products_lines_controller.php 
function index() { 
    $conditions = array(); 
    if (!empty($this->data)) { 
     $data = $this->data; 

     $conditions[] = "(LOWER(ManufacturersProductsLine.manufacturer_id) LIKE '%{$data['ManufacturersProductsLine']['manufacturer_id']}%')"; 
     //$conditions = array("ManufacturersProductsLine.name" => array("Akuret", "Bridgestone", "American Radials")); 

     debug($this->data); 
    } 
    $this->Manufacturer->recursive = 1; 
    $this->set('manufacturersproductslines', $manufacturersproductslines = $this->paginate('ManufacturersProductsLine', $conditions)); 
    $Manufacturer = getModel('Manufacturer'); 
    $this->set('manufacturers', $Manufacturer->find('list')); 
    //$this->ManufacturersProductsLine->recursive = 0; 
    //$this->Post->find('all', array('conditions' => array('ManufacturersProductsLine.manufacturer_id' =>array(0,1,2,3,4,5,6,7,8,9,10,11,12,13)))); 

} 

Когда я отлаживаю и ищу, я получаю следующее.

Array 
(
[ManufacturersProductsLine] => Array 
    (
     [manufacturer_id] => Array 
      (
       [0] => 1 
       [1] => 2 
      ) 

     [name] => 
    ) 
) 

ответ

1

попробуйте изменить условия запроса к этому

$conditions[] = "ManufacturersProductsLine.manufacturer_id IN (" . implode(',', $data['ManufacturersProductsLine']['manufacturer_id'] . ")"; 
+3

Пусть торт обрабатывать поколение SQL: '$ условия [ "ManufacturersProductsLine.manufacturer_id"] = $ данных [ 'ManufacturersProductsLine'] [ 'manufacturer_id'] ; 'Если условие является массивом, оно автоматически преобразуется в" x IN (y) " – nickf

+0

Спасибо Nickf! Я не знал, что вы можете автоматически создавать инструкцию IN SQL. Я действительно решил свою собственную проблему (см. Ниже), но ваш путь намного чище. foreach ($ this-> data ['ManufacturersProductsLine'] ['manufacturer_id'] AS $ key => $ value) { $ conditions ['or'] [] = 'ПроизводителиProductsLine.manufacturer_id ='. $ Value;} – Stirling

+0

очень признателен! – zam3858

Смежные вопросы