zend_db适配器不在/ zend_db_expr中

时间:2009-12-11 19:35:52

标签: php mysql zend-framework

我调用的模型只是一个标准类(不扩展zend_db_table)。我正在做一个选择,并希望有可能排除一组将作为变量传入的ID。

我有以下几点:

public function getItemsBySection($section, $excluded_ids=null){
    //handle this as special case (although only case at this point)

    if(is_array($excluded_ids) and count($excluded_ids)>0){
        $x=1;
        foreach($excluded_ids as $key=>$value){
            if($x==1){
                $not_in=$value;
            }else{
                $not_in.=','.$value;
            }
            $x++;
        }
    }

    if($section=='feed_supplies'){
        $sql='select * from items where is_feed_supply=1';
        if($not_in){
            $sql.=' and id not in ('.$not_in.')';
        }
    }

    echo $sql . '<br/>';

    $results=$this->_db->fetchAll($sql);

但是想知道是否有办法使用Zend_Db_Expr或其他一些concstruct来处理某些项目的排除?我不是错误处理,就像它是一个整数等...

我个人并不是zend_db_select语法的忠实粉丝,但是如果修复了这样的事情(想看Doctrine2)就可以被说服。

感谢

2 个答案:

答案 0 :(得分:4)

$select = $db->select();
$select->from('items')
       ->where('is_feed_supply = ?',1)
       ->where('id NOT IN (?)', $notInArray);

$ notInArray将自动内爆AFAIK(至少对于整数)。然后

$yourSQL = $select->__toString();

Zend_Db_Select rocks:D

而BTW:尽量坚持编码标准

答案 1 :(得分:1)

我不确定是否使用Zend_Db_Expr,但您根本不需要第一个循环来构建$ not_in值。

$not_in = implode( ',', $excluded_ids );