Вернуть все записи, которые соответствуют массиву условий, используя функцию поиска CakePHP.

В настоящее время я пытаюсь вернуть все записи, соответствующие набору условий, которые у меня есть. В настоящее время я могу заставить свой код работать, но вместо того, чтобы возвращать все записи, соответствующие массиву условий, которые я передал, он просто возвращает первую, а затем останавливается вместо четырех, которые, как я знаю, существуют в таблице. м доступ. Это со всеми параметрами, установленными для поиска.

Вот фрагмент кода для лучшего просмотра:

            $array = implode(',', array('1','2','3','4'));

            $a = $this->Assets->find('all', array(
                'conditions' => array(
                    'id' => $array 
                    )
                )   
            );

            var_dump($a);

var_dumping $a просто предоставит запись с идентификатором 1, когда существуют записи для 2, 3 и 4.


person canadiancreed    schedule 09.05.2014    source источник
comment
Почему вы взрываете массив? Cake должен преобразовать array('conditions' => array('id' => array(1,2,3,4))) в WHERE id IN (1,2,3,4) Вы должны проверить, какой запрос генерирует Cake.   -  person Kai    schedule 09.05.2014
comment
@kai Раньше использовал строку для выполнения операторов IN в SQL, думал, что это может быть то же самое, но не думаю.   -  person canadiancreed    schedule 09.05.2014


Ответы (1)


Это ожидаемый результат.

Вы работаете против автомагии ORM. Передача строки приведет к сравнению на равенство, т. е. WHERE x = y, а поскольку id, скорее всего, является целым числом, преобразование превратит строку 1,2,3,4 в 1, поэтому в конечном итоге условие будет WHERE id = 1.

Вместо этого вы должны передать массив

'conditions' => array(
    'id' => array(1, 2, 3, 4) 
)

таким образом ORM сгенерирует условие IN, т.е. WHERE id IN (1,2,3,4).

Это также описано в поваренной книге:
http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions

person ndm    schedule 09.05.2014