モデルにクエリを指定しようとしています。
$this->db
->select('*')
->from('library')
->where('library.rating >=', $form['slider'])
->where('library.votes >=', '1000')
->where('library.language !=', 'German')
->where('library.available_until >=', date("Y-m-d 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
をavailable_until
フィールドのみに制限したいのです。しかし、現在のところ、私が望むものではない、ドイツ語の言語を持つ結果が得られています。どうすれば、or_where
フィルターをavailable_until
フィールドだけに制限できますか?
この2行だけを変更することができます。
->where('(library.available_until >=', date("Y-m-d H:i:s"), FALSE)
->or_where("library.available_until = '00-00-00 00:00:00')", NULL, FALSE)
EDITです。
FALSE`パラメータを省略すると、バックティックがブラケットの前に置かれ、テーブル名/値の一部になってしまい、クエリが使用できなくなります。
NULL`パラメータがあるのは、この関数が2番目のパラメータに値を要求しており、値がないのでNULLを送っているからです。
あなたのコードをこのように変更することができます。
$where_au = "(library.available_until >= '{date('Y-m-d H:i:s)}'OR library.available_until = '00-00-00 00:00:00')" となります。
$this->db
->select('*')
->from('ライブラリ')
->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')。
ヒント: 生成されたクエリを見るには、次のようにします。
echo $this->db->last_query(); die();
Codeigniterのgroupingメソッドで、where節のエスケープを無効にすることなく、library.available_untilのwheresエリアをグループ化することができます。
$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("Y-m-d 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