我调用的模型只是一个标准类(不扩展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)就可以被说服。
感谢
答案 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 );