использовать не равный в пользовательской функции в codeigniter - PullRequest
0 голосов
/ 26 декабря 2018

Я сделал функцию с именем __getwheredata в MY_Controller:

public function __getwheredata($tablename,$tablefield=array(),$where=array(),$orderbyfield = 'id',$ascdesc = 'desc',$limit = 200,$offset='')
{
    if(is_array($tablefield)){$tablefield = implode(',',$tablefield);}
    print_r($where);exit;
    $data = $this->db
                ->select($tablefield)
                ->from($tablename)
                ->where($where)
                ->order_by($orderbyfield, $ascdesc)
                ->limit($limit,$offset)
                ->get();
    return $data->result();
}

Мне нужно получить данные, где field is not equal to 1.

, поэтому явызовите функцию как:

$this->Usermodel->__getwheredata('users','*',array('rights!='=>1),'id','desc',NULL);

, но здесь array('rights!='=>1) будет передан как массив в значении условия where.

, так как я могу решить эту проблему?

1 Ответ

0 голосов
/ 26 декабря 2018

Может быть, вам нужно структурировать весь массив следующим образом:

$temp = '';
$index = 1;
$count = count($where);
foreach($where as $key => $value)
{
    $temp .= $key.$value;
    if($index < $count) $temp .= ',';
    $index++;
}
$where = $temp;

Теперь он будет генерировать операторы where в виде строки, подобной этой rights!=1


Редактировать: или вы можете сделать это так:

foreach($where as $key => $value)
{
    $this->db->where($key, $value);
}

Теперь ваша функция будет выглядеть так:

foreach($where as $key => $value)
{
    $this->db->where($key, $value);
}
$data = $this->db->select($tablefield)
             ->from($tablename)
             ->order_by($orderbyfield, $ascdesc)
             ->limit($limit,$offset)
             ->get(); 
...