codeigniter 中的Where_in

问题描述 投票:0回答:3

我正在使用 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');

但是,它不起作用。

请给我一个解决这个问题的理想。

php codeigniter codeigniter-3 query-builder
3个回答
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;
}

0
投票

如果你使用 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);

0
投票

这项任务很快就会陷入混乱、过度适应的模型方法。

您已经拥有有限的 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。

© www.soinside.com 2019 - 2024. All rights reserved.