2012-11-22 11 views
7

Mam taki stół.NULL porównaj przy użyciu CodeIgniter ActiveRecord

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

Jeśli trzeba zwrócić wszystkie wiersze, gdy pola wieku jest równa NULL i wykonaj następujące czynności i działa poprawnie.

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

Problem polega na tym, że muszę odwrotnie, to znaczy, zwrócić wszystkie wiersze, gdy pola wieku nie są wartościami pustymi.
W SQL zrobić coś takiego

SELECT * FROM person WHERE age is not null 

Jak mogę to zrobić przy użyciu CodeIgniter ActiveRecord ??

Każda pomoc doceniona.

+0

nadzieję, że pomoże http://codeigniter.com/forums/viewthread/119444/P15 – sbaaaang

+0

ty ustawienie Zezwalaj NULL domyślne opcje NULL MySQL do swoich pól db? – sbaaaang

+1

Przydatne wątek na forum. –

Odpowiedz

11

może używać:

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

Jeśli ciekawi, jak to się dzieje, zobaczyć 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'; 
     } 

     ... 
} 

And 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; 
} 

W rezultacie możesz przekazać tylko pierwszy parametr do metody where(), a jeśli pierwszy operator tej metody ma podtytuł is not null, pozostanie nietknięty.

Aby przeczytać więcej - CodeIgniter forum

+0

Bardzo przydatne. Dzięki. –

-1

To musi być droga:

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

Próbuję tego i to nie działa. ActiveRecord próbuje porównać pole z wartością NULL, ale wartość NULL nie jest porównywalna z niczym, więc raportuje błąd składni sql. –

+0

Wypróbuj gdzie ('age is NOT NULL', null) – mallix

+0

zobacz sygnaturę metody 'public function where ($ key, $ value = NULL, $ escape = TRUE)' - drugi parametr nie jest obowiązkowy. – alphacentauri

Powiązane problemy