为什么save方法只在for循环中执行一次?

为什么save方法只在for循环中执行一次?

问题描述:

脚本应该在数据库中创建3个条目,但我只得到一个是最后一个条目。为什么save方法只在for循环中执行一次?

在我看来,save()方法只执行一次,但不是它假设运行3次以及它在for循环中吗?

public function saveAction() 
{ 
     $vars = $this->getRequest()->getPost(); 
     var_dump($vars); 
     $model = mage::getModel('cevent/cevent'); 

     for($i=0;$i<=2;$i++){ 

     $data = array(
      'master_customer_id' => $vars['master_customer_id'][$i], 
      'customer_id'   => 'null', 
      'email'    => $vars['email'][$i], 
      'firstname'   => $vars['firstname'][$i], 
      'surname'    => $vars['surname'][$i], 
      'address'    => $vars['address'][$i], 
      'city'     => $vars['city'][$i] 
     ); 


     $model->addData($data); 
     $model->save();   
    } 
} 

从形式发布数据的数据库

array 
    'master_customer_id' => 
    array 
     0 => string '1' (length=1) 
     1 => string '1' (length=1) 
     2 => string '1' (length=1) 
    'firstname' => 
    array 
     0 => string 'q' (length=1) 
     1 => string 'w' (length=1) 
     2 => string 'e' (length=1) 
    'surname' => 
    array 
     0 => string 'q' (length=1) 
     1 => string 'w' (length=1) 
     2 => string 'e' (length=1) 
    'email' => 
    array 
     0 => string 'q' (length=1) 
     1 => string 'w' (length=1) 
     2 => string 'e' (length=1) 
    'address' => 
    array 
     0 => string 'Invercagille' (length=12) 
     1 => string 'Invercagille' (length=12) 
     2 => string 'Invercagille' (length=12) 
    'city' => 
    array 
     0 => string 'q' (length=1) 
     1 => string 'w' (length=1) 
     2 => string 'e' (length=1) 

DB只显示一个条目

enter image description here

请提出好的建议,或者如果周围有任何其他方式。谢谢

+0

是不是'闭'}失踪? – 2013-04-08 12:13:59

+0

对不起刚刚编辑。它已经在那里了。 – RIK 2013-04-08 12:16:00

Magento的ORM使用save()进行创建和更新操作。主键的存在是资源模型层用来确定是否执行插入或更新。当您的对象数据在第一次迭代期间被保存时,它将被插入,但是自动增量主键被设置在$model引用的实例上,之后您只会获得更新。您可以取消设置数据或在for循环中重新实例化类,并完成多个插入。

您的第一个循环创建一个对象,并且下一个循环将更新这个相同的对象。

您必须重置每个循环中的对象才能创建一个新对象。

而不是使用object->addData(),使用object->setData()将使用新数据替换您的所有数据(并在后台删除存储在您的对象数据中的先前保存的primary_key)。