Использование оператора неравенства в Cakephp - PullRequest
10 голосов
/ 01 декабря 2011

У меня есть запрос find, который выглядит следующим образом.

$this->paginate('Article', array('Article.status !=' => 'Inactive', 'Article.user_id !=' => $blocked_ids, 'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"))

, где $ block_ids - это массив идентификаторов.Выдает ошибку

SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ('170')

При удалении != работает нормально.Нет ошибок

Я ценю любую помощь.

Ответы [ 4 ]

23 голосов
/ 01 декабря 2011

Как подсказал @Josh, попробуйте использовать NOT IN.Правильный формат для CakePHP 1.3.x:

$this->User->find('all', array(
    'conditions' => array(
        'NOT' => array(
            'User.id' => array(1, 2, 3)
        )
    )
));

взят из http://cakebaker.42dh.com/2007/04/26/how-to-use-not-in-in-a-condition/

11 голосов
/ 31 декабря 2012
$this->paginate(
                'Article',
                array (
                     'Article.status <>' => 'Inactive', 
                     'Article.user_id !=' => $blocked_ids, 
                     'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"
                   )
              );
2 голосов
/ 03 декабря 2011

Это должно быть обработано, когда вы получаете данные в функции модели.Вы должны исключить их, используя такой код:

'conditions' => array(
     'Article.status' => 'active',
0 голосов
/ 01 декабря 2011

Попробуйте использовать NOT IN вместо [MySQL Reference] :

$this->paginate('Article', array('Article.status !=' => 'Inactive', 'Article.user_id NOT IN' => $blocked_ids, 'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"))
...