活动记录批处理插入 (yii2) [已关闭]

2022-08-30 12:55:17

是否可以使用 Yii 的 ActiveRecord 在一个查询中插入多行?或者这只能通过较低级别的DAO对象来实现?

我有两种型号 1- 事务 2-事务项

事务项中有多个行(单击添加行)。

我想在数据库中存储多行事务项。

交易项目表的屏幕截图


答案 1

您可以使用 的方法。请在此处查看详细信息。使用它时,请确保在插入之前验证所有数据。batchInsert()yii\db\CommandActiveRecord

假设你有一个带有类的$models数组,它可以像这样完成:Post

$rows = [];
foreach ($models as $model) {
    if (!$model->validate()) {
        // At least one model has invalid data

        break;
    }

    $rows[] = $model->attributes;
}

如果模型不需要验证,则可以使用上述代码来构建数组。ArrayHelper$rows

use yii\helpers\ArrayHelper;

$rows = ArrayHelper::getColumn($models, 'attributes');

然后只需执行批处理插入:

$postModel = new Post;

Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute();

附言:刚刚用于拉取 attirubute 名称列表,您也可以从$models数组中的任何现有$model中拉取它。$postModel

如果不需要插入所有属性,则可以在填充数组时指定它:$rows

$rows[] = [
    'title' => $model->title,
    'content' => $model->content,
];

不要忘记替换为 。$postModel->attributes['title', 'content']

如果属性量较大,则可以使用一些数组函数来指定要插入的确切属性。


答案 2

推荐