如何在任意SQL中使用createCommand()
语句绑定IN子句的数组?
$sql = ... "where campaign.id not in (:notThese) " ...
$campaignId = Yii::$app->db->createCommand($sql)
//->bindValue(':notThese', ...)
->queryScalar();
我用createCommand()
因为我用group by
和having
。这和这个问题很相似& &;答案https://stackoverflow.com/a/31753889/148844但我希望在Yii中有一个更优雅的方式。这个公认的答案是更新。另一个答案很尴尬。createCommand()
似乎没有IN
子句的任何功能。
一些我想对你有帮助的例子:
$values=[4,1];
$campaignId = (new yiidbQuery())->from('campaign')->where(['not in','campaign.id',$values])->groupBy(['groupcolumn'])->scalar();
// SELECT * FROM `campaign` WHERE `campaign.id` NOT IN (4, 1) GROUP BY `groupcolumn`;
$campaignId = (new yiidbQuery())->from('campaign')->groupBy(['groupcolumn'])->having(['not in','campaign.id',$values])->scalar();
// SELECT * FROM `campaign` GROUP BY `groupcolumn` HAVING `campaign.id` NOT IN (4, 1) ;
您应该使用yiidbQuery来使用这些功能
$campaignId = (new yiidbQuery())->from('campaign')->where(['in','campaign.id',$values])->scalar();