【问题标题】:Magento - Integrity constraint violation: 1052 - Shipping MethodMagento - 违反完整性约束:1052 - 运输方式
【发布时间】:2015-06-20 00:45:18
【问题描述】:

以下代码允许向订单/销售页面添加一列,其中将运输方式显示为包含所有送货承运人的运输描述。

_prepareCollection

$collection->getSelect()->join('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('shipping_description'));

_prepareColumn

$this->addColumn('shipping_method', array(
'header' => Mage::helper('sales')->__('Shipping Method'),
'index' => 'shipping_description',
'filter_index' => 'main_table.status',
));

在我编译完所有内容后,运输方式看起来很完美。现在,当我尝试通过处理对订单进行排序并点击搜索时,会出现以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous, query was: SELECT COUNT(*) FROM `sales_flat_order_grid` AS `main_table` INNER JOIN `sales_flat_order` ON main_table.entity_id = sales_flat_order.entity_id WHERE (status = 'processing')

经过一些研究,这意味着表连接时存在双重状态,现在我如何从中创建一个别名以及如何应用它。此外,如果有人知道按此列过滤/排序的方法会很棒。

PS。该文件位于: app/code/local/Mage/Adminhtml/Block/Sales/Order

编辑:现在我试图弄清楚如何根据数据库中的值创建选项下拉列表。这是我要开始工作的代码:

private static $_deliveryGroups = array();

public static function getDeliveryArray() {
if (count(self::$_deliveryGroups) == 0) {
    $delivery_group = new Mage_Shipping_Model_Group();
    $delivery_groups = $delivery_group->getColection()->toOptionHash();
    self::$_deliveryGroups = $delivery_groups;
}
return self::$_deliveryGroups;
}

以及 Grid.php 中的附加值

    $this->addColumn('shipping_method', array(
    'header' => Mage::helper('sales')->__('Shipping Method'),
    'renderer'  => 'Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc',
    'type' => 'options',
    'options' => Vehence_Module_Block_Adminhtml_Block_Sales_Order_Desc::getDeliveryArray(),
    ));

还有这个:

protected function _getAttributeOptions($attribute_code)
    {
        $attribute = Mage::getModel('sales/order')->getAttribute('shipping_description', $attribute_code);
        $options = array();
        foreach( $attribute->getSource()->getAllOptions(true, true) as $option ) {
            $options[$option['value']] = $option['label'];
        }
        return $options;
}

【问题讨论】:

    标签: sql magento filter mysql-error-1054


    【解决方案1】:

    您需要为新字段使用自定义渲染器。然后在渲染器方法中你有 orderId。使用该 ID,您可以实例化订单对象并获取和输出您喜欢的任何字段。

    这里是一个例子:https://magento.stackexchange.com/questions/62856/how-to-get-latest-order-comment-on-the-order-grid-column/62859#62859

    class Vendor_Module_Block_Renderer_Shipping extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
    {
        public function render(Varien_Object $row)
        {
            $orderId = $row->getId();
            $order = Mage::getModel('sales/order')->load($orderId);
            return $order->getData('shipping_description');
        }
    }
    

    在下面的方法中(最好用重写)添加:

    $this->addColumn('history', array(
        'header' => Mage::helper('sales')->__('History status'),
        'type'  => 'text',
        'renderer' => new Vendor_Module_Block_Renderer_Shipping()
    ));
    

    更新.1

    所以... 我没有对我的解决方案应用任何过滤器。问题在于订单收集。视觉上看起来不错,但所有过滤器都在应用不包含过滤所需字段的集合。那是因为我拒绝了我的解决方案。

    那是因为我认为您的解决方案对此目的要好得多,因此我决定修复它。我为该模块创建了 git 存储库。它应该有效。检查这个:https://github.com/zhartaunik/AddField

    希望对你有帮助

    【讨论】:

    • 您能否详细说明如何创建此自定义渲染,不确定该区域的文件管理,如果我可以在 grid.php 或外部类中创建它 - 它将放置在哪里。我真的不想创建一个模块。
    • 已更新。我不建议您重写或编辑核心文件。更好地创建新模块。
    • 不确定您是否注意到,但我复制了核心文件并使用本地文件夹中的相同文件:app/code/local/Mage/Adminhtml/Block/Sales/Order
    • 所以将 $this->addColumn 添加到本地文件夹中的文件中。但根据我的解决方案,您仍然需要创建新的渲染器
    • 哦。接受它...drive.google.com/file/d/0B63my1juIqesdU9OakhwRFRZeDA/… 该模块仅包含渲染器。 $this->addColumn我没加,你还是要加到本地文件夹里
    【解决方案2】:

    您需要添加额外的数组选项来解决此问题,即 filter_index

    $this->addColumn('status', array(
            'header' => Mage::helper('sales')->__('Status'),
            'index' => 'status',
            '**filter_index' => 'main_table.status**',
            'type'  => 'options',
            'width' => '70px',
            'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
    ));
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2012-12-26
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2020-01-14
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多