Использование не равного оператора в CakePHP
У меня есть запрос, который выглядит следующим образом.
$this->paginate('Article', array('Article.status !=' => 'Inactive', 'Article.user_id !=' => $blocked_ids, 'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"))
где $blocked_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')
Когда я удалил !=
, он отлично работает. Нет ошибок
Я ценю любую помощь.
Ответы
Ответ 1
Как предложил @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/
Ответ 2
$this->paginate(
'Article',
array (
'Article.status <>' => 'Inactive',
'Article.user_id !=' => $blocked_ids,
'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"
)
);
Ответ 3
Это нужно обрабатывать, когда вы получаете свои данные в своей модели. Вы должны исключить их, используя следующий код:
'conditions' => array(
'Article.status' => 'active',
Ответ 4
Попробуйте использовать NOT IN
вместо [Справочник по MySQL]:
$this->paginate('Article', array('Article.status !=' => 'Inactive', 'Article.user_id NOT IN' => $blocked_ids, 'Article.tags LIKE' => "%" . trim($this->params['url']['tag']) . "%"))