У меня есть массив с идентификаторами, которые я получаю от клиента. И я хочу использовать эти идентификаторы в моем sql-запросе с предложением IN
. Но этот запрос идет по таблице, у которой нет модели. Таким образом, никакой активной записи (критерии) не существует.
** Таблица userTasks **
-------------------- | idUser | idTasks | ---------+---------- | 1 | 1 | ---------+---------- | 1 | 2 | ---------+---------- | 1 | 3 | ---------+----------
Первый подход не работает, поскольку параметры всегда считаются строками. Итак :tasks
– это строка '1,2,3' вместо списка идентификаторов, разделенных запятыми:
$sql = 'SELECT COUNT(*) AS matches FROM userTasks WHERE idUser = :idUser AND idTask IN (:tasks)'; $result = Yii::app()->db->createCommand($sql) ->queryRow(true,[ ':idUser' => $idUser, ':tasks' => implode(',', $tasks)]); //$tasks is a simple array of ids [1,2,3]
Так что мой обход:
foreach($tasks as $task) //$tasks is a simple array of ids [1,2,3] { $inTasks[] = (int) $task; } $sql = 'SELECT COUNT(*) AS matches FROM userTasks WHERE idUser = :idUser AND idTask IN (' . implode(',', $inTasks . ')'; $result = Yii::app()->db->createCommand($sql) ->queryRow(true,[':idUser' => $idUser]);