Върнете всички записи, които отговарят на масив от условия, като използвате CakePHPs find

В момента се опитвам да върна всички записи, които отговарят на набор от условия, които имам. В момента мога да накарам кода си да работи, но вместо да връща всички записи, които отговарят на масив от условия, които съм преминал, той просто връща първия и след това спира, вместо четирите, които знам, че съществуват в таблицата, която m достъп. Това е с всички параметри, зададени за намиране.

Ето кодовия фрагмент за по-добър изглед:

            $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