2015-06-11 4 views
7

вы видите ошибку? мои условия AND игнорируются! Я получаю так разочарование в связи с этими массивами ..CakePHP find WHERE NOT EQUAL

$transaction_query = $this->Transaction->find('all', 
       [ 
        'limit' => $countList, 
        'fields' => ['Transaction.client_id','Transaction.name','Transaction.created','Transaction.message_id','Transaction.credit'], 
        'conditions' => ['Transaction.id' => $client_id], 
        'AND' => ['Transaction.name !=' => 'Facturation'] 
       ]); 
+1

Можете ли вы, пожалуйста, сообщить подробности о неправильном поведении, с которым вы сталкиваетесь? –

ответ

10

Ваши условия должны быть ['Transaction.id' => $client_id, 'Transaction.name !=' => 'Facturation']. Множественные условия массива conditions интерпретируются как условия «И».

Таким образом, ваш запрос будет выглядеть следующим образом: -

$transaction_query = $this->Transaction->find('all', 
    [ 
     'limit' => $countList, 
     'fields' => [ 
      'Transaction.client_id', 
      'Transaction.name', 
      'Transaction.created', 
      'Transaction.message_id', 
      'Transaction.credit' 
     ], 
     'conditions' => [ 
      'Transaction.id' => $client_id, 
      'Transaction.name !=' => 'Facturation' 
     ] 
    ] 
); 

Вам нужно только индекс, and если у вас есть дубликаты ключей состояние массива; это не так в вашем примере, так как у вас есть Transaction.id и Transaction.name !=. Несмотря на это, индекс and должен быть индексом внутри массива conditions, а не брата.

3
$this->Transaction->find('all', array(
'limit' => $countList, 
'fields' => ['Transaction.client_id','Transaction.name','Transaction.created','Transaction.message_id','Transaction.credit'], 
'conditions' => array("not" => array ('Transaction.id' => $client_id)), 
'AND' => array('not' => ('Transaction.name ' => 'Facturation'))); 

В случае, если вы хотите, чтобы имя не должно быть какая-либо один из них, то вы должны написать запрос следующим образом:

$this->Transaction->find('all', array('conditions' => array('NOT' => array('Transaction.name' => array('a','aa','aaa')))));