CakePHP模型SQL查询条件参数

时间:2012-08-27 18:12:22

标签: php mysql database cakephp cakephp-2.0

我有一个很长的查询:

$a=$this->Signin->find('all',
    array(
        'fields'=> array(
            .....
        ),
        'conditions' => array('mytable.user_type ...),
        'order' => ....
        'limit' => ....
));

user_type 列的值可以为0或1。 我有一个函数参数$type,关于这个参数,我需要更改我的SQL查询。关于$type,我将查询

  • “mytable.user_type”= 1,
  • “mytable.user_type”= 0,
  • “mytable.user_type”= 1或“mytable.user_type = 0

我不想三次写同一个查询。我只想更改条件部分。有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以将 $ type 定义为数组并管理$ type

中的值

喜欢多个值

$type = array(1,0);
'conditions' => array('mytable.user_type'=>$type)

表示单值

$type = array(1);
'conditions' => array('mytable.user_type'=>$type)

因此你只需按照条件操纵$ type,希望这项工作

答案 1 :(得分:1)

试试这个:

$user_type = ($type == 'something') ? 1 : 0 ;

然后,在你的条件下:

'conditions' => array('mytable.user_type' => $user_type);

鉴于user_type只能使用两个值,您的第三个查询("mytable.user_type"=1 OR "mytable.user_type=0)是不必要的

编辑:

if($type == 'conditions_where_usertype_is_necessary') $user_type = ($type == 'something') ? 1 : 0 ;

然后,根据您的条件:

if( isset($user_type) ) {
    $options['conditions']['mytable.user_type'] = $user_type;
}
$options['conditions']['other_conditions'] = ...;
$this->Signin->find('all', $options);