产品网格中的自定义SQL

时间:2014-06-30 09:15:49

标签: php sql magento zend-framework2 magento-1.9

如何在产品网格中添加自定义SQL调用。

这是我到目前为止所做的:

$collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('sku')
        ->addAttributeToSelect('name')
        ->addAttributeToSelect('attribute_set_id')
        ->addAttributeToSelect('type_id');

$collection->joinField(
            'quantity_in_stock',
            'advancedinventory',
            'quantity_in_stock',
            'product_id=entity_id',
            'advancedinventory.place_id=1',
            'inner'
        );

$this->addColumn('quantity_in_stock',
        array(
            'header'=> Mage::helper('catalog')->__('Custom Column'),
            'width' => '80px',
            'type' => 'number',
            'index' => 'quantity_in_stock'
    ));

但这似乎不起作用,我需要从表advancedinventory中获取值,其中product_id是该实体的ID,place_id始终等于1。

任何人都可以提供任何帮助吗?

3 个答案:

答案 0 :(得分:1)

解决了它,

为了解决这个问题,我必须制作这个集合:

$collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('sku')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('attribute_set_id')
            ->addAttributeToSelect('type_id')
            ->joinField('quantity_in_stock', 'mage_advancedinventory', 'quantity_in_stock', 'product_id=entity_id', 'place_id=1', 'left');`

$this->addColumn('quantity_in_stock',
     array(
            'header'=> Mage::helper('catalog')->__('Custom Column'),
            'width' => '80px',
            'type' => 'number',
            'index' => 'quantity_in_stock'
     )
);

答案 1 :(得分:0)

你可以使用如下

这是一个简单的例子,您可以将其应用于您的收藏

$collection = Mage::getResourceModel('catalog/product_collection')

                    ->addAttributeToSelect('name')
                    ->addAttributeToSelect('sku')
                    ->addAttributeToSelect('price')
                    ->addAttributeToSelect('status')
                    ->addAttributeToSelect('visibility')
                    ->addAttributeToFilter('type_id', array('eq' => 'simple'))
                    ->addFieldToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
                    ->addAttributeToFilter('visibility', array('neq' => 1));


   $collection->getSelect()->join(array('abvinv' => "advancedinventory"), "e.entity_id = abvinv.product_id", array('abvinv.*'))

这里我假设product_id

中有advancedinventory

希望这对您有用。

答案 2 :(得分:0)

表的名称应该与magento getResourceModel的定义相同。例如:catalog / category,directory / country_name ...

如果它不起作用,您仍然可以尝试使用$ collection-> getSelect() - > joinLeft(...)编辑选择。