Codeigniter的“where”和“or_where”

2022-08-30 17:21:17

我正在尝试在我的模型中指定查询

$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_whereoravailable_untilor_whereavailable_until


答案 1

您只能修改以下两行:

->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。NULL


答案 2

您可以通过 Codeigniter for 的分组方法对library.available_until where area 进行分组,而不会禁用转义 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


推荐