Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载在Magento对象中意味着什么?_Magento - Fatal编程技术网

加载在Magento对象中意味着什么?

加载在Magento对象中意味着什么?,magento,Magento,我试图通过Magento学习一点编码,我必须承认我对其中的对象链接概念有点困惑 事实上,我不知道什么时候做负荷,什么时候可以避免。例如: $product = Mage::getModel('catalog/product')->load($item->getProductId()); 在这种情况下,我想从产品ID获取产品信息;为什么我需要加载它?($item是订单中所有产品的循环) 在这里,我不需要进行任何加载: $customer = $payment->getOrder

我试图通过Magento学习一点编码,我必须承认我对其中的对象链接概念有点困惑

事实上,我不知道什么时候做负荷,什么时候可以避免。例如:

$product = Mage::getModel('catalog/product')->load($item->getProductId());
在这种情况下,我想从产品ID获取产品信息;为什么我需要加载它?(
$item
是订单中所有产品的循环)

在这里,我不需要进行任何加载:

$customer = $payment->getOrder()->getCustomer();
我提前为我愚蠢的问题感到抱歉:与我的第二个示例相比,load做了什么?非常感谢,祝你今天愉快


Anselme

在幕后,像
$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()
一样

$customer = $payment->getOrder()->getCustomer();
这意味着客户的id已经存在于会话中,因此您不需要显式地告诉magento加载客户


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

这绝对不是一个愚蠢的问题,Anselme。我要说的是,你有勇气尝试从Magento学习编程。我只想回到这一点,因为有人回复得很晚,但是,提出问题的人似乎想知道为什么他必须加载两次东西,因为似乎一组物品应该已经加载了他所要的对象。答案是因为$order->getItems()(例如)返回了一个不完整的Mage_Sales_Model_order_商品模型的集合,这解释了为什么他必须在给定商品id的情况下进行满载()。您回答了标题问题,但没有回答扩展问题。