Load中Magento对象的含义是什么?

时间:2011-02-16 14:42:07

标签: magento

我试图通过Magento学习编码,我不得不承认我对这种对象链的概念感到有点困惑。

事实上,我不明白何时进行加载以及什么时候可以避免它。例如:

$product = Mage::getModel('catalog/product')->load($item->getProductId());

我希望在这种情况下从产品ID获取产品信息;为什么我需要加载它? ($item是订单的所有产品的循环)

在这里我不需要做任何负担:

$customer = $payment->getOrder()->getCustomer();

我很抱歉我的愚蠢问题:与第二个例子相比,加载做了什么?非常感谢,祝你有愉快的一天,

安塞尔姆

2 个答案:

答案 0 :(得分:4)

在幕后,像$payment->getOrder()这样的方法是有效的(在检查它是否已经加载之后)这样做:

return Mage::getModel('sales/order')->load($this->getOrderId());
// $this in this context is $payment

因此,仍然需要加载来从数据库中检索相关数据,getOrder()方法只是一种方便。 load()方法本身返回它的类实例,这就是为什么你可以在第一个例子中将它分配给$product的原因。 getOrder()getCustomer()方法不会自行返回,它们会返回不同的对象,这就是$payment 分配给$customer的原因你的第二个例子。

Mage::getModel()方法仅负责确定正确的类并创建它的空白实例。您可以使用setData()调用来设置数据,而不是加载,而是传递一个键控数组。所有的setter都返回它们的对象,就像load()那样。

答案 1 :(得分:1)

$customer = $payment->getOrder()->getCustomer();

这意味着客户的ID已经存在于会话中,因此您无需明确告诉magento加载客户。

在产品案例中,您必须告诉magento您想要获取详细信息的产品的产品ID。