Codeigniter `where` и` or_where`

Я пытаюсь указать запрос в моей модели

$this->db ->select('*') ->from('library') ->where('library.rating >=', $form['slider']) ->where('library.votes >=', '1000') ->where('library.language !=', 'German') ->where('library.available_until >=', date("Ymd H:i:s")) ->or_where('library.available_until =', "00-00-00 00:00:00") ->where('library.release_year >=', $year_start) ->where('library.release_year <=', $year_end) ->join('rating_repo', 'library.id = rating_repo.id') 

Таким образом, проблема, с которой я or_where с моим or_where . Я хочу, чтобы or ограничивалось только поле available_until . В настоящее время, однако, я получаю результаты, у которых есть немецкий язык, которого я не хочу. Как ограничить мой фильтр or_where только поле available_until ?

Solutions Collecting From Web of "Codeigniter `where` и` or_where`"

Вы можете изменить только две строки:

 ->where('(library.available_until >=', date("Ymd H:i:s"), FALSE) ->or_where("library.available_until = '00-00-00 00:00:00')", NULL, FALSE) 

РЕДАКТИРОВАТЬ:

Опущение параметра FALSE помещало бы обратные элементы перед скобками и делало их частью имени / значения таблицы, делая запрос непригодным.

Параметр NULL существует только потому, что функция требует, чтобы второй параметр был значением, а поскольку у нас его нет, мы отправляем NULL.

Вы можете изменить свой код на это:

 $where_au = "(library.available_until >= '{date('Ymd H:i:s)}' OR library.available_until = '00-00-00 00:00:00')"; $this->db ->select('*') ->from('library') ->where('library.rating >=', $form['slider']) ->where('library.votes >=', '1000') ->where('library.language !=', 'German') ->where($where_au) ->where('library.release_year >=', $year_start) ->where('library.release_year <=', $year_end) ->join('rating_repo', 'library.id = rating_repo.id') 

Совет. Чтобы просмотреть сгенерированный запрос, вы можете использовать $ this-> db-> last_query ();

Вы можете сгруппировать свою библиотеку .available_until wheres area, используя метод группировки Codeigniter для без отключения экранирования where clauses.

 $this->db ->select('*') ->from('library') ->where('library.rating >=', $form['slider']) ->where('library.votes >=', '1000') ->where('library.language !=', 'German') ->group_start() //this will start grouping ->where('library.available_until >=', date("Ymd H:i:s")) ->or_where('library.available_until =', "00-00-00 00:00:00") ->group_end() //this will end grouping ->where('library.release_year >=', $year_start) ->where('library.release_year <=', $year_end) ->join('rating_repo', 'library.id = rating_repo.id') 

Ссылка: https://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping