2009-07-28 8 views
43

Należy wybrać wszystkie wiersze, w których User.site_url nie ma wartości null. Jest to dość proste, aby zrobić to w regularnej kwerendzie MySQL, ale jak to zrobić w CakePHP?CakePHP: Znajdź pole, w którym nie ma wartości null

Instrukcja wymienia następujące:

array ("not" => array (
     "Post.title" => null 
    ) 
) 

Próbowałem następujących ale nadal powrocie wszystko

$this->User->find('all', array('conditions' => array('not' => array('User.site_url')))); 

Odpowiedz

92

myślę, że to jest to, co masz na myśli:

$this->User->find('all', array( 
    'conditions' => array('not' => array('User.site_url' => null)) 
)); 
+0

nie wierzę brakowało mi czegoś takiego, dzięki obie odpowiedzi! – DanCake

+0

Przekłada się na "AND NOT (User.site_url = NULL)". Więc wolę odpowiedź @GwynBleidd ["User.site_url IS NOT NULL"]. –

16

Twój po prostu brakuje wartości zerowej

$this->User->find('all', array('conditions' => array('not' => array('User.site_url'=>null)))); 
11

W Cake, warunek WHERE jest konstruowany z elementu "conditions" poprzez łączenie klawiszy i wartości. Oznacza to, że możesz pominąć dostarczanie kluczy, jeśli chcesz. Np:

array('conditions' => array('User.id'=>1)) 

jest całkowicie równoważna

array('conditions' => array('User.id = 1')) 

Zasadniczo można rozwiązać problemu po prostu tak:

$this->User->find('all', array('conditions' => array('User.site_url IS NOT NULL'))); 
1

Ten drobny praca dla mnie:

$this->User->find('all', array('conditions' => array('User.site_url !=' => null)); 
3

Możesz także spróbować tego,

$this->User->find('all', array('conditions' => array('User.site_url <>' => null)); 

Działa to dobrze dla mnie ..

1

Spróbuj '' zamiast null:

$this->User->find('all', array('conditions' => array('User.site_url <>' => '')); 
+0

Czy możesz opisać, co próbujesz zrobić, i dokładny problem, z którym masz do czynienia? z tej jednej linijki wygląda na to, że używasz wartości "" zamiast niej, której możesz użyć w zapytaniu. – Ravish

0

Do prostego zapytania:

$this->User->find('all', array(
    'conditions' => array(
     'User.site_url IS NOT NULL' 
)); 

Ale jeśli chcesz to zrobić przy dołączaniu zapytań, musisz dołączyć do niego:

$this->User->find('all', array(
    'conditions' => array(
     'User.site_url IS NOT NULL' 
    ), 
    'joins' => array(
      array(
        'table' => $this->getTableName('default', 'table_name'), 
        'alias' => 'ModelName', 
        'type' => 'RIGHT', 
        'conditions' => array(
         'ModelName.id = User.join_field_id', 
         'ModelName.field IS NOT NULL', //<= this condition can be used on main (top) condition 
        ), 
       ), 

)); 
0

jego pracy dla mnie

$this->set('inventory_masters',$this->InventoryMaster->find('all',array('order'=>$orderfinal,'conditions' => array('InventoryMaster.id' => $checkboxid,'not' => array('InventoryMaster.error'=>null))))); 
Powiązane problemy