CakePHP忽略了条件

时间:2015-03-25 00:29:53

标签: php mysql cakephp

我对CakePHP有以下问题:

加入两个表(过滤器和帐户)。然后我正在建立条件,只有第二个条件Account.active =>1被执行。如果我打印结果,仍然会显示另一个mode_id而不是3的过滤器。

$joins= array( 
    array('table' => 'filters',
          'alias' => 'Filter',
          'type' => 'right',
          'conditions' => array(
          'Filter.account_id = Account.id',
                )
            ),
        );

然后我执行包括连接和条件的请求

$activeAccounts = $this->Account->find('all',array(
 'conditions'=>array('AND'=>array('Filter.mode_id'=>3,'Account.active'=>1)),
 'joins'=>$joins));

检查模型并且没有发现问题。过滤器属于帐户。帐户有很多过滤器。

在生成的查询下方。结果仍显示Filter.mode_id不是3

的过滤器

以下是生成的查询。尽管事实上有一个条件是' Filter.mode_id' => 3

,结果仍然包含Filter.mode_id不是3的行。
SELECT `Account`.`id`, `Account`.`user_id`, `Account`.`name`, 
`Account`.`api_key`, `Account`.`account_number`, `Account`.`remaining_balance`, 
`Account`.`investment_size`, `Account`.`active` 
FROM `baseline_db`.`accounts` AS `Account` 
right JOIN `baseline_db`.`filters` AS `Filter` 
  ON (`Filter`.`account_id` = `Account`.`id`) 
WHERE ((`Filter`.`mode_id` = 3) AND 
(`Account`.`active` = '1'))

2 个答案:

答案 0 :(得分:0)

就像说Oldskool一样,使用Model关联 而对于你的条件," AND"没有必要, 你不能放:

$activeAccounts = $this->Account->find('all',array(
    'conditions' => array(
        'Filter.mode_id'=>3,
        'Account.active'=>1
    )
));

答案 1 :(得分:0)

你想要用你所拥有的关系类型做出的请求,在我看来很奇怪。 如果我理解,或许有类似的东西:

$this->loadModel('Filter');
$filters =$this->Filter->find("list", array(
    'conditions' => array('Filter.mode_id' => 3),
    'fields' => array('Filter.account_id')
));
$activeAccounts = $this->Account->find('all',array(
    'conditions' => array(
        'Account.account_id'=>$filters,
        'Account.active'=>1
    )
));