モデルでクエリを指定しようとしています
$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)
編集:
FALSE
パラメータを省略すると、括弧の前にバックティックが配置され、テーブル名/値の一部になり、クエリが使用できなくなります。
NULL
パラメーターが存在するのは、関数が2番目のパラメーターが値である必要があるためであり、1つがないため、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('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()を使用できます。
Codeigniterのgroupingメソッドにより、library.available_untilwheresエリアをグループ化できますwhere節をエスケープせずに無効にします。
$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
$this->db->where('(a = 1 or a = 2)');
使用できます:クエリのグループ化により、WHERE句のグループを括弧で囲むことで作成できます。これにより、複雑なWHERE句を含むクエリを作成できます。ネストされたグループがサポートされています。例:
$this->db->select('*')->from('my_table')
->group_start()
->where('a', 'a')
->or_group_start()
->where('b', 'b')
->where('c', 'c')
->group_end()
->group_end()
->where('d', 'd')
->get();
https://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping