我在Magento中创建了测试模块,我从浏览器调用了更改操作URL,并打印了目录/产品的SQL查询。
我使用此代码
<?php
class Test_Demo_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$block = $this->getLayout()->createBlock('capacityweb/Test','Test',array('template' => 'capacity/web/test.phtml'));
$this->getLayout()->getBlock('content')->append($block);
$this->renderLayout();
}
public function changeAction()
{
$this->loadLayout();
$this->renderLayout();
$action=$this->getRequest()->getParam('action');
$id=$this->getRequest()->getParam('id');
if($action!=null && $id!=null)
{
$relContact = Mage::getModel('catalog/product')->getCollection()->load($id);
}
}
}
如果我使用
$ relContact = Mage :: getModel('catalog / product') - &gt; getCollection() - &gt; load($ id);
然后magento显示SQL查询,而不是这个
我用
$relContact = Mage::getModel('catalog/product')->getCollection();
然后magento不显示任何内容。
那么如何解决
的问题$relContact = Mage::getModel('catalog/product')->getCollection()->load($id);
答案 0 :(得分:1)
在阅读完代码后,我认为你要做的是加载一个产品,在这种情况下,你有$ id。 在这种情况下,您应该使用:
$product = Mage::getModel('catalog/product')->load($id)
然后您可以通过以下方式访问所需数据:
$product->getName();
$product->getDescription()
......等等。
问候
答案 1 :(得分:0)
这不是问题
Magento使用Lazy Loading设计模式进行收藏
在加载集合或迭代结果之前,不会执行集合的sql
因此,Mage::getModel('catalog/product')->getCollection()
将返回一个Mage_Catalog_Model_Resource_Product_Collection
实例的对象,您可以根据需要使用它,但是您还没有产品。
在调用Mage::getModel('catalog/product')->getCollection()->load()
时(顺便说一句...... $id
参数无用),然后查询SELECT FROM catalog_product_entity.....
,$collection->getIterator()
您将获得数据库中的记录作为Mage_Catalog_Model_Product
的实例
的 [编辑] 强>
如果您想要单个产品,请跳过getCollection
来电。您可以获得此类产品的实例
$product = Mage::getModel('catalog/product')->load($id);
//changes some attributes
$product->setData('description', $description);
//or
//$product->setDescription($description);
$product->save().