保存产品属性而不保存整个产品
保存产品属性而不保存整个产品

保存产品属性而不保存整个产品

2010年11月30日发布 in 发展历程
获取可配置的超级属性
2010年11月1日
骆驼在洛杉矶松散:在Magento Imagine Conference上发表演讲
2011年2月3日

今天,我面临着一项有趣的任务。我需要在合理的时间内一次更新多达数千个产品的属性。我首先想到的是加载产品集合,然后保存该集合。在后台,保存集合只是在该集合中的所有模型之间循环,并在模型上调用save方法。

我在测试代码时就朝这个方向开始,Magento抛出了以下错误:

例外‘Zend_Db_Statement_Exception’ with message ‘SQLSTATE [23000]:违反完整性约束:1048列‘value’ cannot be null’

在咨询了这里的其他开发人员之后,我意识到,因为一个集合不会加载整个产品,而只会加载一部分产品’属性。我尝试加载每个产品并保存它,但是结果却非常缓慢。保存仅几百种产品将花费数小时。显然,这是不能接受的。

我开始集思广益,我意识到我可以使用与批量产品属性更新页面使用的方法相同的方法。在研究了这种方法之后,我意识到每次属性更新只能发送一个值。为了解决此限制,我使用新属性值设置了一个键控数组,该属性值是具有该特定值的所有产品的数组值。该数组通过循环输入,并为每个值调用update属性方法。事实证明这非常快,并且极大地简化了该过程。

 

以下代码是我最终用来更新属性的代码。

以前有一篇有关保存产品属性的博客文章 这里。我对1162个产品集的两种方法进行了比较。使用此方法,花费了6.233485秒,而使用单独保存方法花费了8.680476秒。尽管此方法更快,但两种方法之间的差异与相同值的数量成正比。因此,具有超过5个值的2000个集合将比具有1000个值的2000个集合提供更多帮助。

  • 该模块基于Magento 1.4.1.1构建。它应该适用于大多数版本的Magento。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.

最近的帖子查看全部
2020年10月22日

Covid世界中的假日销售:应对挑战

毫无疑问,2020年是历史性的一年。火灾,全球大流行,暴动,老虎王等’只是冰山一角。如 […]
2020年8月7日

涡轮增压ZZPerformance的付费搜索

2020年7月30日

Intermix Beats M1 End of Life with 优雅的骆马Accelerator