2013-06-05 28 views
0

我在这里需要更改ID后,多次救同一型号($ modelcrite)是代码如何多次保存同一个模型作为新的重新编码?

protected function saveed($data1,$studentid,$modelcrite,$model) 
    { 
      $index = 0; 
      foreach ($data1 as $key => $value) { 
       $studentid[$index]=(string)$key; 
       $modelcrite->setAttribute('st_id',$key); 

       if ($modelcrite->validate()){ 
         $modelcrite->setScenario('insert'); 
         $modelcrite->save(); 

        }    
       else { 
        $this->Delete($model->ass_id); 
        return FALSE; 
       } 
       $index=$index+1; 
      } 
      return TRUE; 
    } 

但问题是,当第二次节省$ modelcrite值正在更新database.I需要将它保存为新的
请任何人都可以告诉我该怎么做,谢谢。

+0

我想你可以创建一个新的模型对象,把数据放到那里,然后进入它,它会创建一个新行。 –

+0

不能因为在循环$ data1数组中将st_id值放到$ modelcrite中。 – nu123

+0

'$ modelcrite-> insert()'而不是'$ modelcrite-> save()'?也许需要PK unsetting以及...没有检查。 –

回答

1

我相信你的困惑来自这样一个事实,即ActiveRecord模型不代表一个表格,而是代表表格中的一行。因此,当您传入新模型(行)时,有点改变术语$ modelcrite ActiveRecord认识到这是一个新模型(行),并且保存执行插入。此时Active记录意识到模型(行)存在于表中,并且针对该模型(行)的任何其他保存都会生成更新。

考虑到这一背景,你需要做的是在你的foreach循环中为插入创建一个新模型,并将新模型的属性设置为$ modelcrite,然后设置student_id,然后验证并保存。

事情是这样的:

foreach ($data1 as $key => $value) { 
    $newModel = new CriteModel(); 
    $newModel->attributes = $modelcrite->attributes; 
    $studentid[$index]=(string)$key; 
    $newModel->setAttribute('st_id',$key); 

    if ($newModel->validate()){ 
     $newModel->save(); 
相关问题