在我们的magento管理面板中,我们使用group
列对客户进行排序。
但它显示有错误的查询。
这意味着当点击group
列时,它会转到magento admin dashboard
。
因此我们再次点击管理客户链接,但现在显示错误并显示查询。
以下是包含错误的查询:
SELECT `e`.*, `at_prefix`.`value` AS `prefix`, `at_firstname`.`value` AS `firstname`, `at_middlename`.`value` AS `middlename`, `at_lastname`.`value` AS `lastname`, `at_suffix`.`value` AS `suffix`, CONCAT(IF(at_prefix.value IS NOT NULL AND at_prefix.value != '', CONCAT(LTRIM(RTRIM(at_prefix.value)), ' '), ''), LTRIM(RTRIM(at_firstname.value)), ' ', IF(at_middlename.value IS NOT NULL AND at_middlename.value != '', CONCAT(LTRIM(RTRIM(at_middlename.value)), ' '), ''), LTRIM(RTRIM(at_lastname.value)), IF(at_suffix.value IS NOT NULL AND at_suffix.value != '', CONCAT(' ', LTRIM(RTRIM(at_suffix.value))), '')) AS `name`, `at_default_billing`.`value` AS `default_billing`, `at_billing_postcode`.`value` AS `billing_postcode`, `at_billing_city`.`value` AS `billing_city`, `at_billing_telephone`.`value` AS `billing_telephone`, `at_billing_region`.`value` AS `billing_region`, `at_billing_country_id`.`value` AS `billing_country_id`, `at_group_id`.`value` AS `group_id` FROM `customer_entity` AS `e`
LEFT JOIN `customer_entity_varchar` AS `at_prefix` ON (`at_prefix`.`entity_id` = `e`.`entity_id`) AND (`at_prefix`.`attribute_id` = '4')
LEFT JOIN `customer_entity_varchar` AS `at_firstname` ON (`at_firstname`.`entity_id` = `e`.`entity_id`) AND (`at_firstname`.`attribute_id` = '5')
LEFT JOIN `customer_entity_varchar` AS `at_middlename` ON (`at_middlename`.`entity_id` = `e`.`entity_id`) AND (`at_middlename`.`attribute_id` = '6')
LEFT JOIN `customer_entity_varchar` AS `at_lastname` ON (`at_lastname`.`entity_id` = `e`.`entity_id`) AND (`at_lastname`.`attribute_id` = '7')
LEFT JOIN `customer_entity_varchar` AS `at_suffix` ON (`at_suffix`.`entity_id` = `e`.`entity_id`) AND (`at_suffix`.`attribute_id` = '8')
LEFT JOIN `customer_entity_int` AS `at_default_billing` ON (`at_default_billing`.`entity_id` = `e`.`entity_id`) AND (`at_default_billing`.`attribute_id` = '13')
LEFT JOIN `customer_address_entity_varchar` AS `at_billing_postcode` ON (`at_billing_postcode`.`entity_id` = `at_default_billing`.`value`) AND (`at_billing_postcode`.`attribute_id` = '30')
LEFT JOIN `customer_address_entity_varchar` AS `at_billing_city` ON (`at_billing_city`.`entity_id` = `at_default_billing`.`value`) AND (`at_billing_city`.`attribute_id` = '26')
LEFT JOIN `customer_address_entity_varchar` AS `at_billing_telephone` ON (`at_billing_telephone`.`entity_id` = `at_default_billing`.`value`) AND (`at_billing_telephone`.`attribute_id` = '31')
LEFT JOIN `customer_address_entity_varchar` AS `at_billing_region` ON (`at_billing_region`.`entity_id` = `at_default_billing`.`value`) AND (`at_billing_region`.`attribute_id` = '28')
LEFT JOIN `customer_address_entity_varchar` AS `at_billing_country_id` ON (`at_billing_country_id`.`entity_id` = `at_default_billing`.`value`) AND (`at_billing_country_id`.`attribute_id` = '27')
LEFT JOIN `customer_entity_varchar` AS `at_group_id` ON (`at_group_id`.`entity_id` = `e`.`entity_id`) AND (`at_group_id`.`attribute_id` = '10') WHERE (`e`.`entity_type_id` = '1') ORDER BY `group_id` ASC LIMIT 20
当我们将此查询phpmyadmin-> SQL排除时,它会将错误返回为:
#1052 - Column 'group_id' in order clause is ambiguous
那我怎么解决这个问题呢?
如果我的管理员面板有任何问题?
更新
这是我们在
中添加的功能 D:\wamp\www\mysite\app\code\core\Mage\Adminhtml\Block\Customer\Grid.php
:
protected function _groupFilter($collection, $column){
$this->getCollection()->getSelect()->where(new Zend_Db_Expr("{$this->getColumn()->getFilterIndex()} like '{$column->getFilter()->getValue()}'"));
return $this;
}
protected function _prepareCollection()
{
$collection = Mage::getResourceModel('customer/customer_collection')
->addNameToSelect()
->addAttributeToSelect('email')
->addAttributeToSelect('created_at')
->addAttributeToSelect('group_id')
->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left')
->joinAttribute('billing_city', 'customer_address/city', 'default_billing', null, 'left')
->joinAttribute('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left')
->joinAttribute('billing_region', 'customer_address/region', 'default_billing', null, 'left')
->joinAttribute('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'left');
$this->setCollection($collection);
return parent::_prepareCollection();
}
这是_prepareColumns()
;
$this->addColumn('group', array(
'header' => Mage::helper('customer')->__('Group'),
'width' => '100',
'index' => 'group_id',
'type' => 'options',
'filter_index' => 'e.group_id',
'filter_condition_callback' => array($this, '_groupFilter'),
'options' => $groups,
));
然后我收到了这个错误:
致命错误:在D:\wamp\www\mysite\app\code\core\Mage\Adminhtml\Block\Customer\Grid.php on line 65
这是日志文件中的错误:
2013-08-30T06:48:26+00:00 ERR (3): Warning: Missing argument 1 for Mage_Adminhtml_Block_Widget_Grid::getColumn(), called in D:\wamp\www\mysite\app\code\core\Mage\Adminhtml\Block\Customer\Grid.php on line 65 and defined in D:\wamp\www\mysite\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php on line 431
2013-08-30T06:48:26+00:00 ERR (3): Notice: Undefined variable: columnId in D:\wamp\www\mysite\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php on line 433
答案 0 :(得分:1)
您似乎已更改了默认网格功能,右下方的SQl查询。它应该是e`.`group_id
而不是group_id
。
希望这可以帮到你。
SELECT
e
.*, at_prefix
.value
AS prefix
, at_firstname
.value
AS firstname
, at_middlename
.value
AS middlename
, at_lastname
.value
AS lastname
, at_suffix
.value
AS suffix
, CONCAT(IF(at_prefix.value IS NOT NULL AND at_prefix.value != '', CONCAT(LTRIM(RTRIM(at_prefix.value)), ' '), ''), LTRIM(RTRIM(at_firstname.value)), ' ', IF(at_middlename.value IS NOT NULL AND at_middlename.value != '', CONCAT(LTRIM(RTRIM(at_middlename.value)), ' '), ''), LTRIM(RTRIM(at_lastname.value)), IF(at_suffix.value IS NOT NULL AND at_suffix.value != '', CONCAT(' ', LTRIM(RTRIM(at_suffix.value))), '')) AS name
, at_default_billing
.value
AS default_billing
, at_billing_postcode
.value
AS billing_postcode
, at_billing_city
.value
AS billing_city
, at_billing_telephone
.value
AS billing_telephone
, at_billing_region
.value
AS billing_region
, at_billing_country_id
.value
AS billing_country_id
, at_group_id
.value
AS group_id
FROM customer_entity
AS e
LEFT JOIN customer_entity_varchar
AS at_prefix
ON (at_prefix
.entity_id
= e
.entity_id
) AND (at_prefix
.attribute_id
= '4')
LEFT JOIN customer_entity_varchar
AS at_firstname
ON (at_firstname
.entity_id
= e
.entity_id
) AND (at_firstname
.attribute_id
= '5')
LEFT JOIN customer_entity_varchar
AS at_middlename
ON (at_middlename
.entity_id
= e
.entity_id
) AND (at_middlename
.attribute_id
= '6')
LEFT JOIN customer_entity_varchar
AS at_lastname
ON (at_lastname
.entity_id
= e
.entity_id
) AND (at_lastname
.attribute_id
= '7')
LEFT JOIN customer_entity_varchar
AS at_suffix
ON (at_suffix
.entity_id
= e
.entity_id
) AND (at_suffix
.attribute_id
= '8')
LEFT JOIN customer_entity_int
AS at_default_billing
ON (at_default_billing
.entity_id
= e
.entity_id
) AND (at_default_billing
.attribute_id
= '13')
LEFT JOIN customer_address_entity_varchar
AS at_billing_postcode
ON (at_billing_postcode
.entity_id
= at_default_billing
.value
) AND (at_billing_postcode
.attribute_id
= '30')
LEFT JOIN customer_address_entity_varchar
AS at_billing_city
ON (at_billing_city
.entity_id
= at_default_billing
.value
) AND (at_billing_city
.attribute_id
= '26')
LEFT JOIN customer_address_entity_varchar
AS at_billing_telephone
ON (at_billing_telephone
.entity_id
= at_default_billing
.value
) AND (at_billing_telephone
.attribute_id
= '31')
LEFT JOIN customer_address_entity_varchar
AS at_billing_region
ON (at_billing_region
.entity_id
= at_default_billing
.value
) AND (at_billing_region
.attribute_id
= '28')
LEFT JOIN customer_address_entity_varchar
AS at_billing_country_id
ON (at_billing_country_id
.entity_id
= at_default_billing
.value
) AND (at_billing_country_id
.attribute_id
= '27')
LEFT JOIN customer_entity_varchar
AS at_group_id
ON (at_group_id
.entity_id
= e
.entity_id
) AND (at_group_id
.attribute_id
= '10') WHERE (e
.entity_type_id
= '1') ORDER BY e
.group_id
ASC LIMIT 20
答案 1 :(得分:0)
您应该在列中添加以下内容:
$this->addColumn(
'filter_index' =>'e.group'
)
要进行过滤,如果仍然无效,请尝试将其添加到您的列中:
$this->addColumn(...
'filter_condition_callback' => array($this, '_groupFilter'),
...
)
并为您的网格类添加功能:
private function _groupFilter($collection, $column){
$this->getCollection->getSelect()->where(new Zend_Db_Expr("{$this->getColumn()->getFilterIndex()} like '{$column->getFilter()->getValue())}'"));
return $this;
}
答案 2 :(得分:0)
如果要使用此函数$this->getColumn()
,则需要在此函数上添加函数参数columnId
。因为,实际的功能就是这样,
public function getColumn($columnId)
{
if (!empty($this->_columns[$columnId])) {
return $this->_columns[$columnId];
}
return false;
}
getFilterIndex()
也一样。你不能在不知道专栏的情况下指出。这看起来像$column->getFilterIndex()
对于sql语法错误,请先删除order子句。然后,再次测试它。让我知道错误。
希望这段代码能为您提供帮助。