Я пытаюсь запросить столбец с createCommand, делая что-то вроде этого:
Yii::$app->db->createCommand('Select column1 from table where column2 in :array)
->bindValues(['array'=>['(1,2,3,4,5)', PDO::PARAM_INT]])->queryColumn('COLUMN1');
В идеале я хочу, чтобы мой оператор SQL выполнялся как
select column1 from table where column2 in (1,2,3,4,5)
Однако, когда SQL выполняется, всегда есть кавычки, обернутые вокруг связанных параметров, например, так:
select column1 from table where column2 in '(1,2,3,4,5)'
Я не уверен, почему это все еще происходит после того, как я определил PDO для использования PDO :: PARAM_INT. Разве int не должен цитироваться?
Вы можете попробовать немного другой подход, используя Query Builder:
$rows = (new \yii\db\Query())
->select('column1')
->from('table')
->where(['column2' => [1,2,3,4,5]])
->column();
Это дает желаемый эффект: предложение where автоматически генерируется с использованием синтаксиса in (…) из-за переданного массива.
Не уверен, если вам явно нужно привести типы массива к INT, если они внутри PHP имеют тип STRING внутри …
Других решений пока нет …