gar*_*hdn 15 php mysql activerecord codeigniter
我正在尝试在我的模型中指定查询
$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')
Run Code Online (Sandbox Code Playgroud)
所以,我遇到的麻烦就是我的or_where.我希望or仅限于该available_until领域.然而,目前,我得到的结果是德语不是我想要的.如何将我的or_where过滤器限制在该available_until字段中?
Yan*_*erk 28
您只能修改两行:
->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)
Run Code Online (Sandbox Code Playgroud)
编辑:
省略FALSE参数会将反引号放在括号之前,并使它们成为表名/值的一部分,从而使查询无法使用.
该NULL参数是存在的,只是因为功能要求的第二个参数是一个值,因为我们没有一个,我们发送NULL.
m4t*_*1t0 14
您可以将代码更改为:
$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');
Run Code Online (Sandbox Code Playgroud)
提示:要观察生成的查询,可以使用$ this-> db-> last_query();
MER*_*ĞAN 13
您可以通过分组 Codeigniter的方法对您的library.available_until wheres区域进行分组,而无需禁用转义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')
Run Code Online (Sandbox Code Playgroud)
参考:https://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
小智 6
您可以使用: 查询分组允许您通过将WHERE 子句括在括号中来创建 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();
Run Code Online (Sandbox Code Playgroud)
https://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
| 归档时间: |
|
| 查看次数: |
127174 次 |
| 最近记录: |