views:

729

answers:

1

I have a multi-select box named Manufacturer Name that is displaying correctly, even clickable for multi search. When I run the search I am not getting any results from my database using the complex find conditions I set. I've tried to use Complex-Find-Conditions from the bakery, and other various websites but no avail.

//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>

Commented out is things I have tried in my controller for setting the multiple find conditions.

//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))));

}

When I debug and search I am getting the following.

Array

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

        [name] => 
    )

)

A: 

try changing the query condition to this

$conditions[] = "ManufacturersProductsLine.manufacturer_id IN (" . implode( ',', $data['ManufacturersProductsLine']['manufacturer_id'] . ")";
zam3858
Let Cake handle the SQL generation: `$conditions["ManufacturersProductsLine.manufacturer_id"] = $data['ManufacturersProductsLine']['manufacturer_id'];` If a condition is an array, it is automatically converted to "x IN (y)"
nickf
Thank you Nickf! I didn't know you could automatically create the IN SQL statement. I had actually solved my own issue like this (see below), but your way is much cleaner. foreach ($this->data['ManufacturersProductsLine']['manufacturer_id'] AS $key => $value) {$conditions['or'][] = 'ManufacturersProductsLine.manufacturer_id ='.$value;}
Stirling
much appreciated!
zam3858