我试图找到将conditions设置为变量的国家,如下所示:

$conditions = '1,2,3';
$this->set('options',
    $this->Agency->Country->find('list',
        array(
            'conditions' => array(
                'Country.zone_id' => array($conditions)
             )
        )
    )
);

这将导致找到所有id为1或2或3的国家。
但在这种情况下,只有$conditions中的第一个值被考虑到一个帐户中,所以在这种情况下,它的工作方式类似于Country.zone_id' => array(1)。它只返回区域id=1的国家。为什么其他的都被跳过了?

最佳答案

我认为这个值被转换成一个int的值,这意味着“1”之后的剩余部分被忽略。如果提供了一个数组,那么它的行为就像SQL中的IN子句,每个数组条目都是要检查的值。
因此,如果必须使用一个字符串,每个ID用逗号分隔,请尝试以下操作:

'conditions' => array(
    'Country.zone_id' => explode(",", $conditions)
)

否则,如果您已经有一个数字ID数组,那么您可以直接分配它:
'conditions' => array(
    'Country.zone_id' => array(1, 2, 3),
)

10-07 23:31