2009-07-28 6 views
43

Je dois sélectionner toutes les lignes où User.site_url n'est pas null. C'est assez simple de le faire dans une requête MySQL classique, mais comment cela se fait-il dans CakePHP?CakePHP: Rechercher où le champ n'est pas nul

Le manuel mentionne ce qui suit:

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

Je l'ai essayé ce qui suit, mais il est de retour encore tout

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

Répondre

92

Je pense que c'est ce que vous entendez:

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

Je ne crois pas avoir manqué quelque chose comme ça, grâce à la fois des réponses! – DanCake

+0

Traduit en "AND NOT (User.site_url = NULL)". Donc je préfère @GwynBleidd répondre ['User.site_url IS NOT NULL']. –

16

Votre il manque juste le zéro

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

Dans Cake, une condition WHERE est construite à partir de l'élément 'conditions' en joignant des clés et des valeurs. Cela signifie que vous pouvez ignorer les clés si vous le souhaitez. Par exemple:

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

est tout à fait équivalent à

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

Essentiellement, vous pouvez résoudre votre problème en ceci:

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

Ce beau travail pour moi:

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

Vous pouvez également essayer ceci,

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

Cela fonctionne bien pour moi ..

1

S'il vous plaît essayer '' plutôt que null:

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

Pouvez-vous décrire ce que vous essayez de faire, et le problème exact auquel vous faites face? à partir de ce paquebot, il semble qu'il vous dise d'utiliser '' à la place null que vous pourriez utiliser dans votre requête. – Ravish

0

Pour requête simple:

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

Mais si vous voulez le faire Pour rejoindre les requêtes, vous devez vous y inscrire:

$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

Son travail pour moi

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