2014-12-08 25 views

cevap

42

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.

+0

Yani, cevap hayır mı? DAO kullanmalıyım. – user1561346

+0

Bence şu anda ActiveRecord bunu kutunun dışında desteklemiyor. Daha fazla araştırma yapabilirsiniz, ancak bulamıyorum. – arogachev

+1

$ postModel-> öznitelikleri $ postModel-> öznitelikleri olmalıdır() – Dodo