我正在开发一个自定义 Magento 模块,该模块需要将电子邮件地址列表保存到自定义表中。相关代码如下所示:
foreach($this->getNewSubscriptionsForAPI() as $email){
$requestModel->setEmail($email);
$requestModel->setAction('subscribe');
$requestModel->setPosted(date('Y-m-d H:i:s'));
$requestModel->save();
}
getNewSubscriptionsForAPI()
方法返回有效数据,$requestModel
是一个有效的 Magento 模型。
但是,当此循环运行时,数据库适配器会简单地覆盖前一条记录之上的每条记录。即,如果我在 phpMyAdmin 中反复点击“浏览”,我可以看到不同的电子邮件地址被写入数据库,但总是在同一行中,覆盖了之前的条目。 id 字段已正确设置:作为主键,设置为 AUTO_INCREMENT,并在资源模型中标记为 id 字段。
有趣的是,我可以使用上面的循环在核心 newsletter/subscriber
表中毫无问题地写入连续的记录。
当然,我可以简单地unset()
模型并在每个循环周期将其从 Mage::getModel()
中取回,但是这 (a) 看起来非常浪费,并且 (b) 破坏了我用于测试的依赖注入(inject)设置(我不希望代码实例化它自己的模型,而是使用我传递给它的模型)。
谁能指出我正确的方向?
最佳答案
当 Magento 保存一个新对象时,它会自动为该对象生成一个 id。保存对象后,将生成一个 id。要使 magento 再次将您的数据识别为新模型,您只需取消设置模型 id
。不过,我认为 unsetData
更优雅,因为它还会删除可能为前一个对象创建的任何数据:-)。
关于php - 在 Magento 中多次调用 $model->save() 覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797791/