伙计们我对Magento很新,所以有人可以帮助我吗? 以下是我在销售订单网格中获取礼品消息的代码:在管理员中:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->join('sales/order_item','`sales/order_item`.order_id=`main_table`.entity_id',array(
'giftavail' => new Zend_Db_Expr('group_concat(`sales/order_item`.gift_message_available SEPARATOR ",")'),
'giftid' => new Zend_Db_Expr('group_concat(`sales/order_item`.gift_message_id SEPARATOR ",")'),
'skus' => new Zend_Db_Expr('group_concat(`sales/order_item`.sku SEPARATOR ",")'),
'name' => new Zend_Db_Expr('group_concat(`sales/order_item`.name SEPARATOR ",")'),)
);
$collection->getSelect()->group('main_table.entity_id');
$collection->getSelect()->joinLeft(array('sfog' => 'sales_flat_order_grid'),
'main_table.entity_id = sfog.entity_id',array('sfog.shipping_name','sfog.billing_name'));
$collection->getSelect()->joinLeft(array('sfo'=>'sales_flat_order'),
'sfo.entity_id=main_table.entity_id',array('sfo.customer_email','sfo.weight',
'sfo.discount_description','sfo.increment_id','sfo.store_id','sfo.created_at','sfo.status',
'sfo.base_grand_total','sfo.grand_total'));
$collection->getSelect()->joinLeft(array('sfoa'=>'sales_flat_order_address'),
'main_table.entity_id = sfoa.parent_id AND sfoa.address_type="shipping"',array('sfoa.street',
'sfoa.city','sfoa.region','sfoa.postcode','sfoa.telephone' , 'sfoa.country_id'));
$collection->getSelect()->joinLeft(array('gfm' => 'gift_message'),
'main_table.giftid = gfm.gift_message_id',array('gfm.message'));
$this->setCollection($collection);
return parent::_prepareCollection();
}
这是生成的SQL查询:
“SELECT main_table
。*,group_concat(sales/order_item
。gift_message_available SEPARATOR”,“)AS giftavail
,group_concat(sales/order_item
.cood_message_id SEPARATOR”,“)AS { {1}},group_concat(giftid
。sku SEPARATOR“,”)AS sales/order_item
,group_concat(skus
。name SEPARATOR“,”)AS sales/order_item
,{{1 } {。{}},name
。sfog
,shipping_name
。sfog
,billing_name
。sfo
,customer_email
。sfo
,weight
。sfo
,discount_description
。sfo
,increment_id
。sfo
,store_id
。{ {1}},sfo
。created_at
,sfo
。status
,sfo
。base_grand_total
,sfo
。{{1 },grand_total
。sfoa
,street
。sfoa
,city
。sfoa
,region
。sfoa
,postcode
。sfoa
来自telephone
AS sfoa
内部加入country_id
AS gfm
ON message
。order_id = {{1} } .entity_id LEFT JOIN sales_flat_order_grid
AS main_table
ON main_table.entity_id = sfog.entity_id LEFT JOIN sales_flat_order_item
AS sales/order_item
ON sfo.entity_id = main_table.entity_id LEFT JOIN {{1 AS sales/order_item
ON main_table.entity_id = sfoa.parent_id AND sfoa.address_type =“shipping”LEFT JOIN main_table
AS sales_flat_order_grid
ON main_table.entity_id = gfm.giftid GROUP BY {{1 }}。sfog
“
但这不起作用,任何人都可以帮忙??? 在此先感谢
答案 0 :(得分:0)
使用以下代码更新您的代码:
protected function _prepareCollection(){
$collection->join(array('order_item'=>'sales/order_item'),'`order_item`.order_id=`main_table`.entity_id',array(
'giftavail' => new Zend_Db_Expr('group_concat(`order_item`.gift_message_available SEPARATOR ",")'),
'giftid' => new Zend_Db_Expr('group_concat(`order_item`.gift_message_id SEPARATOR ",")'),
'skus' => new Zend_Db_Expr('group_concat(`order_item`.sku SEPARATOR ",")'),
'name' => new Zend_Db_Expr('group_concat(`order_item`.name SEPARATOR ",")'))
);
$collection->getSelect()->group('main_table.entity_id');
$collection->getSelect()->joinLeft(array('sfog' => 'sales_flat_order_grid'),
'main_table.entity_id = sfog.entity_id',array('sfog.shipping_name','sfog.billing_name'));
$collection->getSelect()->joinLeft(array('sfo'=>'sales_flat_order'),
'sfo.entity_id=main_table.entity_id',array('sfo.customer_email','sfo.weight',
'sfo.discount_description','sfo.increment_id','sfo.store_id','sfo.created_at','sfo.status',
'sfo.base_grand_total','sfo.grand_total'));
$collection->getSelect()->joinLeft(array('sfoa'=>'sales_flat_order_address'),
'main_table.entity_id = sfoa.parent_id AND sfoa.address_type="shipping"',array('sfoa.street',
'sfoa.city','sfoa.region','sfoa.postcode','sfoa.telephone' , 'sfoa.country_id'));
$collection->getSelect()->joinLeft(array('gfm' => 'gift_message'),
'order_item.gift_message_id = gfm.gift_message_id',array('gfm.message'));
$this->setCollection($collection);
return parent::_prepareCollection();
}
然后你将得到sql查询
SELECT `main_table`.*, group_concat(`order_item`.gift_message_available SEPARATOR ",") AS `giftavail`,
group_concat(`order_item`.gift_message_id SEPARATOR ",") AS `giftid`,
group_concat(`order_item`.sku SEPARATOR ",") AS `skus`,
group_concat(`order_item`.name SEPARATOR ",") AS `name`, `sfog`.`shipping_name`,
`sfog`.`billing_name`, `sfo`.`customer_email`,
`sfo`.`weight`, `sfo`.`discount_description`, `sfo`.`increment_id`,
`sfo`.`store_id`, `sfo`.`created_at`, `sfo`.`status`,
`sfo`.`base_grand_total`, `sfo`.`grand_total`, `sfoa`.`street`,
`sfoa`.`city`, `sfoa`.`region`, `sfoa`.`postcode`,
`sfoa`.`telephone`, `sfoa`.`country_id`, `gfm`.`message`
FROM `sales_flat_order_grid` AS `main_table`
INNER JOIN
`sales_flat_order_item` AS `order_item`
ON `order_item`.order_id=`main_table`.entity_id
LEFT JOIN
`sales_flat_order_grid` AS `sfog`
ON main_table.entity_id = sfog.entity_id
LEFT JOIN
`sales_flat_order` AS `sfo`
ON sfo.entity_id=main_table.entity_id
LEFT JOIN
`sales_flat_order_address` AS `sfoa`
ON main_table.entity_id = sfoa.parent_id AND sfoa.address_type="shipping"
LEFT JOIN
`gift_message` AS `gfm`
ON order_item.gift_message_id = gfm.gift_message_id
GROUP BY
`main_table`.`entity_id`
问题是sales_flat_order_item
表格alise名称,最后一行是礼品消息。您使用main_table.giftid
代替order_item.gift_message_id
。
希望会有所帮助!