【发布时间】:2015-06-17 07:43:18
【问题描述】:
我想知道你如何在Yii2 中创建一个批量数据库INSERT?
例如一个普通的INSERT 我想要这样:
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES(:id,:my_value)");
$sql->bindValues([':id' => $id, ':my_value' => $my_value]);
$sql->execute();
现在如果我想创建一个批量 INSERT 怎么办?
如果没有绑定值,你可以这样:
foreach ($foo as $bar) {
$data_sql .= '(' . $id . ',' "'" . $bar . "'),"
}
$data_sql = rtrim($data_sql, ',');
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES" . $data_sql);
$sql->execute();
但是如果你仍然想绑定值,你怎么能做到这一点呢?
编辑:这个问题与链接的问题不同,因为我没有使用ActiveRecord。
编辑 2:
理想情况下,如果有一个提供一定灵活性的解决方案会很好,例如能够编写您自己的大部分语法,如下面的答案之一:
Yii::$app->db->createCommand()->batchInsert('tableName', ['id', 'title', 'created_at'], [
[1, 'title1', '2015-04-10'],
[2, 'title2', '2015-04-11'],
[3, 'title3', '2015-04-12'],
])->execute();
...不提供。对于这种特殊情况,我需要使用上述解决方案不提供的IGNORE 语句。
【问题讨论】:
-
创建类似
INSERT INTO some_table(id,my_value) VALUES (?, ?),(?, ?),(?, ?),(?, ?)的内容并填充占位符? -
嗯,我曾想过通过在每个占位符的末尾附加数字来做类似的事情,但希望有更好的方法。