Cakephp, используя переменную массива в операции поиска - PullRequest
4 голосов
/ 23 августа 2011

Я создаю короткий список, который хранится в переменной Session для торта

$this->Session->read('Item.shorlist');

Содержит список идентификаторов, разделенных запятыми, например.1,2,3,4,5

$shortlist =  $this->Session->read('Item.shorlist');

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

$shortlist = $this->Item->find('all', array('conditions' => array('Item.id' => array($shortlist))));

Однако, это только возвращает 1 набор данных.Если я вручную добавлю массив, например:

$shortlist = $this->Item->find('all', array('conditions' => array('Item.id' => array(1,2,3,4,5))));

, я получу все 5 возвращенных записей.

Любые идеи, как обойти это, не выполняя многократных находок для каждого идентификатора?Если я посмотрю на дамп SQL, то увижу, где WHERE Item. id = ('1,2,3,4,5'), используя переменную $ shortlist, тогда как, если я введу ее вручную в виде целых чисел, разделенных запятыми, например: WHEREItem. id IN (1, 2, 3, 4), тогда запрос sql работает так, как мне бы хотелось.Поэтому я предполагаю, что мой вопрос заключается в том, как преобразовать разделенную запятыми строку в целые числа через запятую в переменной, чтобы SQL не выдавал ошибку?

Ответы [ 2 ]

5 голосов
/ 23 августа 2011

Когда вы извлекаете значение сеанса с помощью этой строки, $shortlist = $this->Session->read('Item.shorlist'); будет строкой, пожалуйста, убедитесь, что это массив.

Используйте функцию explode $short_list_array = explode(',', $shortlist); для преобразования ее в массив и используйте

$shortlist = $this->Item->find('all', array('conditions' => array('Item.id' => $short_list_array)));

2 голосов
/ 23 августа 2011
$shortlist = array_map('trim', explode(',',$shortlist)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...