1

我有一个函数根据传递的参数返回数据。基本上,查询会根据子句而变化。

if(1==$case) 
return select()->from('db')->where('x',$something)->where('y','fixed')...

else if(2==$case)
return select()->from('db')->where('x','fixed')->where('y',$something)...

有没有更好的方法来做到这一点?

另外,是否有可能有这样的条款

...->where('category',*)

'*' 被一个值或等同于“any”的东西替换。

4

3 回答 3

3

这种类型的查询也称为“动态查询”,因为您可以轻松地组合子句。试试这个:

$query = $this->db->select()
    ->from('db');
if(1==$case) {
    $query->where('x',$something)
          ->where('y','fixed')
}
elseif (2==$case){
    $query->where('x','fixed')
          ->where('y',$something)
}
....
return $query->get();

回答你的第二个问题,你可以使用:

$this->db->like('category', '%');
于 2013-04-05T09:53:27.277 回答
3

你可以这样做-

$where = array();

if(1==$case) 
 $where['x'] = $something;
 $where['y'] = 'fixed';

else if(2==$case)
 $where['x'] = $something;
 $where['y'] = 'fixed';

$this->db->where($where);
$this->db->get();
于 2013-04-05T09:55:14.970 回答
1

你可以像这样简化它

if($case == 1){
    $this->db->where('x',$something)->where('y','fixed');
}else if($case == 2){
    $this->db->where('x','fixed')->where('y',$something)
}else{
    //no where clause
}
$query  =   $this->db->get('db_table');
return $query->result();
于 2013-04-05T09:55:21.173 回答