Yani, ActiveRecord ile bir sorguya birden çok satır eklemek mümkün mü, ya da bunun için DAO kullanmak daha iyidir?ActiveRecord batch insert (yii2)
cevap
yii\db\Command
numaralı batchInsert()
yöntemini kullanabilirsiniz. Ayrıntılar için here. ActiveRecord
ile kullanıldığında, yerleştirmeden önce tüm verilerin doğrulandığından emin olun.
$rows = [];
foreach ($models as $model) {
if (!$model->validate()) {
// At least one model has invalid data
break;
}
$rows[] = $model->attributes;
}
modeller $rows
diziyi oluşturmak için ArrayHelper
kullanarak yukarıdaki kısa kod can doğrulama gerektiren yoksa: sizi varsayarsak
sınıfa Post
ile modeller, böyle yapılabilir $ dizi var.
use yii\helpers\ArrayHelper;
$rows = ArrayHelper::getColumn($models, 'attributes');
Sonra sadece toplu insert yürütün:
$postModel = new Post;
Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute();
Not; $postModel
yalnızca attırubute adlar listesinin çekilmesi için kullanılır, bunu ayrıca $ models dizinizdeki mevcut herhangi bir $ modelinden de çekebilirsiniz.
Eğer $rows
dizi doldururken tüm bunu belirtebilirsiniz niteliklerini eklemek gerekmiyorsa:
$rows[] = [
'title' => $model->title,
'content' => $model->content,
];
['title', 'content']
için
$postModel->attributes
yerine unutmayın.
Daha fazla öznitelik olması durumunda, ekleme için tam özellikleri belirtmek için bazı dizi işlevlerini kullanabilirsiniz.
Yani, cevap hayır mı? DAO kullanmalıyım. – user1561346
Bence şu anda ActiveRecord bunu kutunun dışında desteklemiyor. Daha fazla araştırma yapabilirsiniz, ancak bulamıyorum. – arogachev
$ postModel-> öznitelikleri $ postModel-> öznitelikleri olmalıdır() – Dodo