php - 在 Magento 中多次调用 $model->save() 覆盖数据

标签 php magento

我正在开发一个自定义 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/

相关文章:

magento - 如何在模板文件中加载自定义 PHP Magento block

php - 如何在 mysql 和 laravel 中处理数百万条记录

php - 安全的 PHP 数据库配置

php - 在javascript中为数组赋值

php - 是否可以在 codeigniter 中仅使用一个查询来计算特定的 id 并从另一个表中减去?

html - <ul> 列表元素符号显示在一个地方,但不在另一个地方

git - 致命的 : fetch-pack: unable to fork off sideband demultiplexer

magento - 自定义 Magento 管理员配置密码加密

php - 如何在 PHP 中将数据从主数组传递到多个数组

svn - 在现有安装上设置 Magento 和 SVN