加载属性值而不加载整个实体
Posted
技术标签:
【中文标题】加载属性值而不加载整个实体【英文标题】:Loading an attribute value without loading an entire entity 【发布时间】:2011-01-31 22:55:05 【问题描述】:所以我正在编写一个功能,我在其中获取一个类别的父类别 ID,并希望在 Magento 中获取其中一个父类别的 url_key。我想在不必加载类别的情况下做到这一点,发现了这个方法getAttributeRawValue
,可以在这里找到/app/code/core/Mage/Catalog/Model/Resource/Eav/mysql4/Abstract.php
。基本上,似乎没有必要加载整个实体然后只获取与该实体 ID 关联的属性值。
它得到了我需要的东西,但我想知道它是否比加载类别和获取属性要好得多。加载类别本质上是在做同样的事情,但对每个属性都做吗?
【问题讨论】:
您能否发布完整的代码 sn-p 以便我们查看调用的上下文? 加载原始值不会避免任何覆盖?首先是类别模型的_afterLoad
方法,然后可能是自定义getter。我什至没有检查相关事件。这些行为可能会在您不知情的情况下被第三方扩展更改。我相信正确的做法是使用完整的模型方法,然后缓存您的结果。
但如果它只是获得一个 url_key 或类似的类别名称,那么任何类型的覆盖都无关紧要,对吧?我的意思是,一个 url_key 就是一个 url_key。我使用它的目的是将它放在类名的 body 标记上。
你可能是对的,但@clockworkgeek 的观点仍然成立。
【参考方案1】:
我的第一个想法是使用内置的 Varien Profiler 对其进行定量测试。这是一个未被充分利用的非常有用的技巧。
基本上,您需要在管理员(系统>配置>高级>开发人员>调试>分析器)中打开分析,然后在要分析的代码的任一侧插入带有唯一字符串的启动/停止指令。例如
Varien_Profiler::start('__CATEGORY_URL_KEY_RETURN__');
....
your code here
....
Varien_Profiler::stop('__CATEGORY_URL_KEY_RETURN__');
在浏览器中加载页面,您将在底部看到 Profiler 输出。
享受吧!
【讨论】:
以上是关于加载属性值而不加载整个实体的主要内容,如果未能解决你的问题,请参考以下文章