【发布时间】: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