現在有如下數據:
$user=array( 0=>array('id'=>1,'name'=>'張三'), 0=>array('id'=>2,'name'=>'李四'), );
現在如果需將這兩條數據批量插入到數據表的話,一般大家都會想到用foreach,然後調用 insert 或者 save 方法插入數據。但實際操作卻是在foreach循環操作中,insert 只會插入第一條數據,save 卻只會插入第二條數據。這是為什麼呢?解釋如下:
插入一行到基於這個ActiveRecord的屬性表。如果表的主鍵是自動增量和插入前為null,將插入後的實際值填充。注意,驗證不執行此方法。你可以調用validate執行驗證。記錄成功插入到數據庫後,它的isNewRecord屬性將設置為false,和它的scenario屬性將設置為 update。
既然如此,那麼除了使用事務該如何實現數據的批量插入呢?經試驗總結了如下兩種方法:
第一種方法
$model=new User(); foreach($data as $attributes){ $_model=clone $model; $_model->setAttributes($attributes); $_model->save(); }
第二種方法
$model=new User(); foreach($data as $attributes){ $model->isNewRecord=true; $model->setAttributes($attributes); $model->save()&&$model->id=0; }