使用cakephp find返回符合条件数组的所有记录


Return all records that match array of conditions using CakePHPs find

我目前正在尝试返回与我拥有的条件数组匹配的所有记录。目前我可以让我的代码工作,但不是返回所有的记录匹配的数组条件,我已经传递,它只返回第一个,然后停止,而不是四个,我知道存在于我正在访问的表。这是为find设置的all参数。

下面是一个更好的视图代码片段:
            $array = implode(',', array('1','2','3','4'));
            $a = $this->Assets->find('all', array(
                'conditions' => array(
                    'id' => $array 
                    )
                )   
            );
            var_dump($a);

var_dump $a将只提供id为1的记录,而同时存在id为2、3和4的记录。

这就是预期的结果。

你正在对抗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