使用 CodeIgniter ActiveRecord 进行 NULL 比较 [重复]

Posted

技术标签:

【中文标题】使用 CodeIgniter ActiveRecord 进行 NULL 比较 [重复]【英文标题】:NULL compare using CodeIgniter ActiveRecord [duplicate] 【发布时间】:2012-11-11 02:29:20 【问题描述】:

我有一张这样的桌子。

[id]     [name]     [age]
1        foo        20
2        bar        NULL

如果我需要在年龄字段为 NULL 时返回所有行,我执行以下操作,它工作正常。

$this->db->from('person')->where('age', null);

问题是我需要做相反的事情,我的意思是,当年龄字段不是空值时返回所有行。 在 SQL 中我做这样的事情

SELECT * FROM person WHERE age is not null

我如何使用 CodeIgniter ActiveRecord 做到这一点??

任何帮助表示赞赏。

【问题讨论】:

希望这会有所帮助codeigniter.com/forums/viewthread/119444/P15 您是否将 ALLOW NULL DEFAULT NULL mysql 选项设置为您的数据库字段? 这是在 where 命令中进行多重比较的方式 $where = array('somebit' => '1', 'status' => 'Published', 'sc_id' => TRUE ); $this->db->where($where); @sbaaaang 引用的线程现在位于ellislab.com/forums/viewthread/119444/P15 【参考方案1】:

你可以使用:

$this->db->from('person')->where('age is not null');

如果你好奇这是怎么发生的,请看system/database/DB_active_rec.php

protected function _where($key, $value = NULL, $type = 'AND ', $escape = NULL)

    ...

        if (is_null($v) && ! $this->_has_operator($k))
        
            // value appears not to have been set, assign the test to IS NULL
            $k .= ' IS NULL';
        

        ...

还有system/database/DB_driver.php

/**
 * Tests whether the string has an SQL operator
 *
 * @access  private
 * @param   string
 * @return  bool
 */
function _has_operator($str)

    $str = trim($str);
    if ( ! preg_match("/(\s|<|>|!|=|is null|is not null)/i", $str))
    
        return FALSE;
    

    return TRUE;

因此,您可以只将第一个参数传递给where() 方法,如果此方法的第一个运算符有一个子字符串is not null,它将保持不变。

阅读更多 - CodeIgniter forum

【讨论】:

【参考方案2】:

一定是这样的:

 $this->db->from('person')->where('age IS NOT NULL', null);

【讨论】:

我尝试过,但它不起作用。 ActiveRecord 尝试将该字段与 NULL 进行比较,但 NULL 不比较等于任何值,因此,它会报告 sql 语法错误。 试试 where('age IS NOT NULL', null) 查看方法签名public function where($key, $value = NULL, $escape = TRUE) - 第二个参数不是必须的。 是的@mallix 可以正常工作,但就像 alphacentauri 所说,在这种情况下不需要 null。

以上是关于使用 CodeIgniter ActiveRecord 进行 NULL 比较 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在非 Codeigniter 类中加载和使用 Codeigniter 模型

是否有多个验证存在

使用 Rails 6 ActiveRecord 进行完全外连接

如何在没有 codeIgniter MVC 框架的情况下使用数据库 codeigniter 类?

Rails 还是 Grails? [关闭]

使用 jcrop 和 CodeIgniter 裁剪图像