CakePHP комплекс найти запрос - PullRequest
1 голос
/ 28 марта 2012

как мне построить запрос find () в cakePHP, используя следующие условия:

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)

Может кто-нибудь сказать мне, как я могу создать такой запрос поиска?

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Я собираюсь дать вам несколько советов, но вы должны попытаться сделать это, так как это очень просто и всегда полезно практиковать.

Базовая находка в торте имеет вид

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

Это в форме по умолчанию: SELECT * from model_names (условное обозначение имени таблицы во множественном числе - единственное ModelName - model_names)

Чтобы добавить условия:

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

Чтобы добавить условия И

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

Чтобы добавить условия ИЛИ

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

Чтобы объединить оба

$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

(кстати)Я уверен, что найдутся пользователи, которые дадут вам точные ответы, поэтому просто примите мой ответ для справки :))

3 голосов
/ 28 марта 2012
$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' => '')
             )
         )
    )
)));
...