7

私はこのようなテーブルを持っています。

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

年齢のフィールドがNULLのときにすべての行を返す必要がある場合は、次のようにします。これで問題なく動作します。

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

問題は、逆のことをする必要があることです。つまり、年齢フィールドがnull値でない場合は、すべての行を返します。
SQLで私はこのようなことをします

SELECT * FROM person WHERE age is not null

CodeIgniter ActiveRecordを使用してこれを行うにはどうすればよいですか?

助けていただければ幸いです。

4

2 に答える 2

11

以下を使用できます。

$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 フォーラム

于 2012-11-22T17:07:13.923 に答える
-1

これは方法でなければなりません:

 $this->db->from('person')->where('age IS NOT NULL', null);
于 2012-11-22T16:45:02.293 に答える