我正在使用 Codeigniter 3 构建一个网站。但现在我在从数据库获取数据时遇到问题。
这是我的模特:
public function Get($arr_condition = null)
{
if(!is_null($arr_condition))
{
$this->db->where($arr_condition);
}
$query = $this->db->get('cus');
if($query->num_rows()>0)
{
return $query->result_array();
}
return false;
}
在控制器中,我使用数组($arr_condition)来获取条件列表:
$arr_condition['Cus_team'] = 1;
$arr_condition['Cus_user != '] = 2;
$arr_condition['Cus_phone LIKE'] = 09900000;
$arr_condition['Cus_role >'] = 1;
$result = $this->M_cus_dal->Get($arr_condition);
我的代码工作完美,直到我需要Where_in的条件,我尝试过:
$arr_condtion['Cus_id IN']= array('1,2,3');
但是,它不起作用。
请给我一个解决这个问题的理想。
希望这对您有帮助:
你可以做这样的事情:
在控制器中传递你的 where_in 条件和另一个像这样的参数
$where_in = array('1,2,3');
$result = $this->M_cus_dal->Get($arr_condition,$where_in);
在模型方法中获取
$where_in
作为第二个参数,将其添加到 where_in
子句中,如下所示:
public function Get($arr_condition = null,$where_in = NULL)
{
if(!is_null($arr_condition))
{
$this->db->where($arr_condition);
}
if(! empty($where_in))
{
$this->db->where_in('Cus_id',$where_in);
}
$query = $this->db->get('cus');
if($query->num_rows()>0)
{
return $query->result_array();
}
return false;
}
如果你使用 where_in 那么你的 ids 应该在数组中
像这样:
$where_in[] = 1;
$where_in[] = 2;
$where_in[] = 3;
或
$where_in = array('1','2','3');
$this->db->where_in('Cus_id', $where_in);
这项任务很快就会陷入混乱、过度适应的模型方法。
您已经拥有有限的 WHERE 条件语法,其中之一是糟糕/不正确地实现了 LIKE 条件。随着需求的增长,您要么需要解析和分离键以执行不同的条件操作,要么需要继续为模型方法签名构建越来越多的参数(
$where
、$like
、$in
、 $notLike
、$notIn
、$orderBy,
$限制,
$选择,
$加入`)
不,我建议您抑制构建大型实用方法的冲动。根据需要构建您需要的内容,目的是缩小其用途并使其参数最少。
如果您必须将所需的功能作为单个参数,那么您需要进行条件查询构建器调用。
控制器:
$conditions = [
'Cus_team' => 1,
'Cus_user !=' => 2,
'Cus_phone LIKE' => 09900000,
'Cus_role >' => 1,
'Cus_id' => [1, 2, 3],
];
$result = $this->M_cus_dal->get($conditions);
型号:
public function get(array $conditions = []): array
{
foreach ($conditions as $k => $v) {
if (is_array($v)) {
$this->where_in($k, $v);
} elseif (str_ends_with($k, ' LIKE')) {
$this->db->like(substr($k, 0, -5), $v);
} else {
$this->db->where($k, $v);
}
}
return $this->db->get('cus')->result_array();
}
模型方法将返回一个包含零个或多个子数组的数组。
我从不从通常返回二维数组的方法中返回 false。