-1

我在 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')->getCollection()->load($id);

然后 magento 显示 SQL 查询,而不是这个

我用

$relContact = Mage::getModel('catalog/product')->getCollection();   

然后magento不显示任何东西。

那么如何解决问题

$relContact = Mage::getModel('catalog/product')->getCollection()->load($id);   
4

2 回答 2

1

阅读您的代码后,我认为您要做的是加载一个产品,在这种情况下,您有 $id。在这种情况下,您应该使用:

 $product = Mage::getModel('catalog/product')->load($id)

然后您可以通过以下方式访问期望数据:

   $product->getName();
   $product->getDescription()

... 等等。

问候

于 2013-07-30T00:08:52.203 回答
0

这不是问题。
Magento 对集合使用延迟加载设计模式。
在加载集合或遍历结果之前,不会执行集合的 sql。
SoMage::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().

在此处查看有关它的更多详细信息

于 2013-07-29T13:08:16.997 回答