我有一个函数根据传递的参数返回数据。 基本上,查询根据子句而变化。
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”的值或其他内容。
答案 0 :(得分: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', '%');
答案 1 :(得分: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();
答案 2 :(得分: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();