2012-03-28 7 views
1

wie kann ich einen find() Abfrage in CakePHP bauen diese Bedingungen:CakePHP komplexe Suchabfrage

Find where 
MyModel.x = 1 and MyModel.y = 2 OR 
MyModel.x = 1 and MyModel.y value does not exist (or is equal to empty string) 

Kann mir jemand sagen, wie ich über den Aufbau solcher Fund Abfrage gehen kann?

Antwort

4

Ich gebe Ihnen ein paar Hinweise, aber Sie müssen versuchen, dies zu tun, da es sehr einfach ist und es ist immer gut zu üben.

Eine grundlegende Entdeckung in Kuchen in Form von

$this->ModelName->find('all'); 

diese in seinem Standardformular funktioniert ein SELECT * from model_names (convention Singular Modelnamen für mehrere Tabellennamen zu haben ist - model_names)

Bedingungen hinzufügen :

$this->ModelName->find('all', array('conditions' => array('ModelName.x' => 1)); 

hinzuzufügen und Bedingungen

hinzuzufügen, oder Bedingungen

$this->ModelName->find('all', array('conditions' => array(
    'OR' => array(
     'ModelName.x' => 1, 'ModelName.y' => 2 
    ) 
)); 

beide

$this->ModelName->find('all', array('conditions' => array(
    'ModelName.y is not' => null, 
    'OR' => array(
     'ModelName.x' => 1, 'ModelName.y' => 2 
    ) 
)); 

// where y is not null and (x = 1 or y = 2) 

http://book.cakephp.org/1.3/view/1030/Complex-Find-Conditions

zu kombinieren (btw ich bin sicher, dass es Benutzern, Ihnen die genauen Antworten zu geben, so einfach nehmen meine Antwort für Ihre Referenz :))

3
$this->MyModel->find('all', array('conditions' => array(
    'OR' => array(
     array(
      'MyModel.x' => 1, 
      'MyModel.y' => 1 
     ), 
     array(
      'MyModle.x' => 1, 
      'OR' => array(
        array('MyModel.y' => NULL), 
        array('MyModel.y' => '') 
      ) 
     ) 
    ) 
)));