【问题标题】:Custom SQL In Product Grid产品网格中的自定义 SQL
【发布时间】:2014-06-30 09:15:48
【问题描述】:

如何在产品网格中添加自定义 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。

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

【问题讨论】:

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


    【解决方案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'
         )
    );
    

    【讨论】:

    • 真的有必要加入该领域两次,因为第二次加入之前似乎不起作用吗?
    • 实际上可能不是。我现在将修改答案。
    【解决方案2】:

    你可以像下面这样使用

    这是一个简单的示例,您可以将其应用到您的收藏中

    $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 表中可用

    希望这对你有用。

    【讨论】:

    • 嗨,我试过了,它只会让产品网格页面冻结。我即将编辑主要问题以添加更多信息。
    • 这意味着您必须使用自定义表编写左连接?
    • 抱歉,我必须在集合内的advancedinventory 表的哪里添加左连接?你能修改你的答案给我看吗?
    【解决方案3】:

    表的名称应该是为 magento getResourceModel 定义的。例如:目录/类别、目录/国家名称...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多