2013-02-12 5 views
0

У меня есть этот запрос:Запрос в CakePHP 1.2

$conditions = array(
      'editore LIKE' => "%$e%", 
      'titolo LIKE' => "%$t%" 
     ); 
     if (isset($autore_diviso)) 
      $conditions[] = array('autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"));     
     else 
      $conditions[]=array('autori LIKE' => "%$a%"); 
     if (!$anno&&!$anno2) // I HAVE TO CHANGE THIS - if the user does not insert any year 
      $conditions=$conditions; 
     else { 
     if (!$anno) 
      $conditions[] = array('anno <=' => "$anno2");   
     if (!$anno2) 
      $conditions[] = array('anno >=' => "$anno"); 
     } 
     if ($anno&&$anno2) 
      $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2)); 

Где Anno средний год, EDITORE означает издатель и titolo означает название.

Это не работает поиск ровно 2 авторов.
Если отладить $ условия, у меня есть, например:

Array (
[editore LIKE] => %% 
[titolo LIKE] => %% 
[0] => Array 
    (
     [autori LIKE ? AND ?] => Array 
      (
       [0] => %massi% 
       [1] => %palu% 
      ) 

    )) 


Но результат пуст.

ответ

0

Это не то, как вы добавляете элементы в массивы в PHP. Кроме того, нет необходимости использовать явный AND, это значение по умолчанию. Это необходимо, только если в противном случае было бы несколько одинаковых ключей массива.

$conditions = array(
    'autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"), 'editore LIKE' => "%$e%", 
    'titolo LIKE' => "%$t%" 
); 

if (!$anno) 
    $conditions[] = array('anno <=' => "$anno2");   

if (!$anno2) 
    $conditions[] = array('anno >=' => "$anno"); 

if ($anno&&$anno2) 
    $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2)); 
+0

Я получаю близко, но это не работает поиск по 2 авторов, я редактировал вопрос. – Ettore

0

решаемые с этим кодом:

$conditions = array(
     'editore LIKE' => "%$e%", 
     'titolo LIKE' => "%$t%" 
    ); 
    if (isset($autore_diviso)) 
     $conditions[] = array('autori LIKE ? AND autori LIKE?' => array("%$autore1%","%$autore2%"));      
    else 
     $conditions[]=array('autori LIKE' => "%$a%"); 
    if (!$anno&&!$anno2) // Da sistemare. 
     $conditions=$conditions; 
    else { 
    if (!$anno) 
     $conditions[] = array('anno <=' => "$anno2");   
    if (!$anno2) 
     $conditions[] = array('anno >=' => "$anno"); 
    } 
    if ($anno&&$anno2) 
     $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2)); 
    debug($conditions); 
Смежные вопросы