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