Sie können verwenden batchInsert() Methode von yii\db\Command. Siehe Einzelheiten hier. Bei Verwendung mit ActiveRecord Stellen Sie sicher, dass Sie alle Daten vor dem Einfügen validieren.
Angenommen, Sie haben ein Array von $models mit Klasse Postdas geht so:
$rows = [];
foreach ($models as $model) {
if (!$model->validate()) {
// At least one model has invalid data
break;
}
$rows[] = $model->attributes;
}
Wenn Modelle keine Validierung erfordern, können Sie den obigen Code mit verkürzen ArrayHelper zum Bauen $rows Reihe.
use yii\helpers\ArrayHelper;
$rows = ArrayHelper::getColumn($models, 'attributes');
Dann einfach Batch Insert ausführen:
$postModel = new Post;
Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute();
PS Die $postModel Wird nur zum Abrufen der Namensliste von Attributen verwendet. Sie können dies auch aus jedem vorhandenen $model in Ihrem $models-Array abrufen.
Wenn Sie nicht alle Attribute einfügen müssen, können Sie dies beim Ausfüllen angeben $rows Array: