如何使用Zend Framework中的join从相关表中获取所有行

时间:2017-03-18 14:42:17

标签: php zend-framework

我有两张桌子。第一个表包含要约详细信息,第二个表包含要约语言集合(可以在主要要约形式中选择集合)。我想使用" join"语言表在单个查询中获取所有这些。它的样子如何: Relation

尝试获取我希望将所有提供语言作为一个字段的所有优惠。

     array [
      'id' => string '11',
      'name' => string '134',
      'date' => string '01-12-2016',
      'languages' => array(all language value from related table)
     ]

这是我的问题:

        $select = $this->getDbTable()->select()
            ->setIntegrityCheck(false)
            ->from(array('o' => 'offers'), array('o.*'))
            ->joinLeft(array('ol' => 'offer_language'), 'ol.id_offer = o.id', array('ol.*'));

    $resultSet = $this->getDbTable()->fetchAll($select)

通过这种方式,如果一个报价有三种语言,那么我会得到三种不同语言字段的报价。

Zend版本:1.11

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决方案是使用带有GROUP_CONCAT的Zend_Db_Expr。 这里有两篇帖子会给你一个明确的解释: Can I concatenate multiple MySQL rows into one field?How to use GROUP_CONCAT with Zend Framework?

您的代码最终会看起来像这样:

$select = $this->getDbTable()->select()
          ->setIntegrityCheck(false)
          ->from(array('o' => 'offers'), array('o.*'))
          ->joinLeft(array('ol' => 'offer_language'), 'ol.id_offer = o.id', array('languages' => new Zend_Db_Expr('GROUP_CONCAT(ol.language)')))
          ->group('o.id');
祝你好运!