MySQL get_where с условием If в Codeigniter - PullRequest
0 голосов
/ 24 января 2020

В моей модели есть следующая функция для фильтрации записей сотрудников. Функция работает нормально.

public function getOfficer()
    {
        $q = $this->db->order_by('last_name','ASC')->get_where('tbl_officer', array('status' => '1', 'usr' =>$this->session->userdata('id_user')));    
        if ($q->num_rows() > 0) {
            return $q->result();
        }
        return false;
    }

Далее, я хочу отфильтровать записи офицера только для пользователя = 4 в сеансе, по p_code-> 8,10 и 24

Если работает следующим образом:

if($usr == 4)
        {
        $this->datatables->where('tbl_officer.p_code', 8)->or_where('tbl_officer.p_code', 10)->or_where('tbl_officer.p_code', 24);

        } else {
        $this->datatables->where('tbl_officer.usr', $usr);
    }

Как я могу включить это условие If в упомянутую выше функцию модели? Что можно изменить? Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Просто нужно изменить метод написания запроса

public function getOfficer()
 {
     $usr = $this->session->userdata('id_user');
     $userArray = array(8,10,24);
     $this->db->select('*');
     $this->db->from('tbl_officer');
     if($usr == 4){
        $this->db->where_in('usr',$userArray );
     }else{
        $this->db->where('usr',$usr);
     }
     $q = $this->db->get();
     if ($q->num_rows() > 0) {
        return $q->result();
     }
     return false;
}

0 голосов
/ 24 января 2020

Пожалуйста, используйте where_in

$this->datatables->where('tbl_officer.p_code', 8)->or_where('tbl_officer.p_code', 10)->or_where('tbl_officer.p_code', 24);

до

$this->datatables->where_in('tbl_officer.p_code', [8,10,24]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...