在Magento的集合中的Join Table中选择Query with Multiple Rows

时间:2017-11-03 09:16:35

标签: php mysql magento join zend-framework

如果我在主表中加入的表有两行,父表ID为1,那么如何在Magento的_preparecollection中执行Select语句。

我现在的表。

表1(主表) enter image description here

表2(sales_flat_invoice_comment) enter image description here

我当前的准备收藏

$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection->getSelect()->join( array('a'=> mgmx_sales_flat_invoice_comment), 'a.parent_id = main_table.entity_id', array('a.comment'));
$this->setCollection($collection);
return parent::_prepareCollection();

这个查询,在echo中将是这样的

  

SELECT main_table。*,acomment   来自mgmx_sales_flat_invoice_grid AS main_table   INNER JOIN mgmx_sales_flat_invoice_comment AS a   在a.parent_id = main_table.entity_id

但如果此查询在表2中找到多于一行,则会返回错误。

我想要的是类似下面的内容

enter image description here

带|作为分隔符。

我如何在Magento的_prepareCollection中实现这一目标。

2 个答案:

答案 0 :(得分:0)

您必须按entity_id分组,然后使用group_concat创建评论栏。您可以在组中定义分隔符。

连锁列的长度有限制。因此,根据单个注释的长度和可能发生的注释数量,您无法在结果中获得所有注释。

我希望这有助于解决您的问题。

答案 1 :(得分:0)

要在zend框架中加载group_concat,可以使用Zend_Db_Expr对象对其进行定义

类似

$collection->getSelect()->join(
    array('a'=> new Zend_Db_Expr('GROUP_CONCAT(mgmx_sales_flat_invoice_comment)')), 
    'a.parent_id = main_table.entity_id', 
    array('a.comment')
);

何时需要在zend框架内执行自定义数据库功能的知识很容易。