Quindi, è possibile inserire più righe in una query con ActiveRecord, oppure è meglio utilizzare DAO per questo?Inserimento batch ActiveRecord (yii2)
risposta
È possibile utilizzare il metodo batchInsert()
di yii\db\Command
. Vedere i dettagli here. Quando lo si utilizza con ActiveRecord
assicurarsi di convalidare tutti i dati prima di inserirli.
si Assumendo hanno gamma di $ modelli con classe di Post
, esso può essere fatto in questo modo:
$rows = [];
foreach ($models as $model) {
if (!$model->validate()) {
// At least one model has invalid data
break;
}
$rows[] = $model->attributes;
}
Se i modelli non richiedono la convalida è possibile a breve il codice sopra utilizzando ArrayHelper
per la costruzione di $rows
array.
use yii\helpers\ArrayHelper;
$rows = ArrayHelper::getColumn($models, 'attributes');
Poi basta eseguire inserto in batch:
$postModel = new Post;
Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute();
P.S. Lo $postModel
viene usato per estrarre la lista dei nomi attirubute, puoi anche estrarlo da qualsiasi modello $ esistente nel tuo array $ models.
Se non è necessario inserire tutti gli attributi è possibile specificare che quando si riempie $rows
array:
$rows[] = [
'title' => $model->title,
'content' => $model->content,
];
Non dimenticare di sostituire $postModel->attributes
a ['title', 'content']
.
In caso di una quantità maggiore di attributi è possibile utilizzare alcune funzioni di array per specificare gli attributi esatti per l'inserimento.
- 1. Yii2 ActiveRecord cache
- 2. Yii2 ActiveRecord che deride con Mockery
- 3. JDBC prestazioni di inserimento batch
- 4. Inserimento batch in binari 3
- 5. JDBC Gestione eccezioni inserimento batch
- 6. Inserimento o incremento atomico in ActiveRecord/Rails
- 7. Come impostare l'univocità per più campi in ActiveRecord (Yii2)?
- 8. Yii2 ORDER BY per i dati relazionali in ActiveRecord
- 9. Inserimento batch JDBC SLOW! Voglio dire, DAVVERO LENTAMENTE?
- 10. Come si esegue un inserimento batch in Django?
- 11. Inserimento batch di oggetti con relazioni in Laravel-4
- 12. Set yii2-jeasyui per yii2
- 13. Yii2: get raw sql di model-> save()
- 14. Yii2 DatePicker
- 15. Yii2 traduzione
- 16. Batch inserto in Yii
- 17. Yii2 salvataggio del file su Oracle BLOB
- 18. come fa activerecord a sapere di eseguire un inserimento o un aggiornamento?
- 19. Connessione a più database su yii2
- 20. ActiveRecord :: UnknownAttributeError?
- 21. ActiveRecord :: SubclassNotFound
- 22. ActiveRecord :: DangerousAttributeError
- 23. Yii2 - soggetto non sta risparmiando in ciclo foreach in Yii2
- 24. Risultato da ActiveRecord :: Base.connection.execute (sql) - PostgreSQL
- 25. RIPOSO Yii2 Semplifica BasicAuth
- 26. Yii2 DepDrop kartik
- 27. Yii2 discesa opzione vuota
- 28. URL nel yii2 GridView
- 29. Parametro richiesta Yii2 dall'URL
- 30. traduzione Yii2 non funziona
Quindi, la risposta è no? Dovrei usare DAO. – user1561346
Penso che attualmente ActiveRecord non supporti questo fuori dalla scatola. Puoi fare ulteriori ricerche, ma non riesco a trovarlo. – arogachev
$ postModel-> gli attributi dovrebbero essere $ postModel-> attributes() – Dodo