如何在Yii2中插入批量数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Yii2中插入批量数据库?相关的知识,希望对你有一定的参考价值。

我想知道你如何在INSERT做一个批量数据库Yii2

例如一个正常的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语句。

答案

有一个特殊的batchInsert方法:

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();
另一答案

此代码将值绑定为不带ActiveRecord的占位符

Yii::$app->db->createCommand('INSERT INTO some_table (id, my_value) VALUES(:id, :value')
    ->bindValue(':id', $id)
    ->bindValue(':value', $value)
    ->execute();

以上是关于如何在Yii2中插入批量数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Yii2如何批量添加数据

yii2 使用 ActiveRecord 批量插入

Yii2 批量插入

php Yii2批量插入助手。支持“忽略”和“重复密钥更新”策略

如何使用yii2的缓存依赖特性

yii2 怎么批量删除