gpt4 book ai didi

magento - 从已加载的 Magento 模型中检索附加数据

转载 作者:行者123 更新时间:2023-12-02 20:43:11 26 4
gpt4 key购买 nike

在某些情况下,我收到的模型仅包含我需要的一些数据,例如不包含我可能需要使用的某些属性的 catalog/product 实例,例如尺寸、小部件数量或腰围。

为了缓解这个问题,我当前的选择是:

  • 创建一个新 block ,并使用 addAttributeToSelect($name) 手动加载所需的属性。
  • 使用当前填充不足的模型中的 ID 在模板中加载整个模型,例如 Mage::getModel('catalog/product')->getId($product->getId( ))

对于我的问题:有没有办法可以在调用 ->load() 后选择我想要加载到模型集合中的其他属性?另外,有没有办法在个别模型上执行此操作?

最佳答案

问题中描述了正确且最安全的方法(但不是最好的 - 见下文) - 再次加载产品。

由于以下几个原因,目前还没有开发出在产品加载后添加更多属性的方法:

1) 在模型生命周期内,许多值都会被计算并缓存在模型内。因此,添加更多属性(例如价格)将改变模型的状态,但不会影响多个方法的结果,这些方法旨在返回这些属性值(例如 getPrice()),但在内部进行一些额外的预处理并依赖于先前计算的值数据。

2) 模型的状态将不一致,因为某些方法将返回根据先前的空属性计算的缓存且当前无效的值,而其他一些方法将返回非缓存值。因此,使用此类模型将是不安全的,并且其属性将是不可预测的。

3)支持这种重新加载的代码复杂性相当大。

解决方案

1)第一个好的解决方案(尽管是最重的一个)是每次您的 block /模型/助手需要其中的扩展属性集时再次加载产品。

2) 更好的解决方案 - 是加载新的集合,其中所有产品都具有所有附加属性,只要您看到这些属性是必需的,而原始集合没有它们。

3) 最好的解决方案 - 是加载具有所有必需属性的原始产品集合。有时,集合确实会加载具有可能属性子集的产品 - 主要是 EAV 优化的遗留代码(现在默认情况下“打开”平面表,并且不需要此优化)或者可能当集合由搜索引擎加载时(例如 Solr)在 Magento EE 中),默认情况下,它不会在其记录中存储所有属性。

3.1)您可以将所需的属性添加到实例化位置的原始集合中 - 通过问题中提到的 addAttributeToSelect($attributeNames) 方法

3.2) 您可以将属性添加到属性列表中,属性列表会自动填充到集合中。属性列表因模块而异,并且存储在不同的位置。有些在配置中,有些在数据库中。具体位置(配置或数据库表),在哪里添加自动填充属性,取决于您的具体情况。

4) 有时,当您只需要属性值时,编写资源模型可能会更容易、更快,这将直接通过 productIds 和当前 storeId 从数据库加载它们> 范围。然后,您可以冒险将它们设置为集合中产品的属性,或者安全地将它们设置为产品 myAdditionalAttribuesValuesArray 属性,或者用作映射到产品 ID 的独立数组。

关于magento - 从已加载的 Magento 模型中检索附加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com