如何使用Doctrine连接select语句中的字段

时间:2015-02-20 12:31:48

标签: doctrine-orm

我想知道如何在DQL select语句中连接两个字段和一些文字。

我现在有这个,但没有运气......

$qb
            ->select('season.id, concat(competition.name, '-',season.name) AS specs')
            ->leftJoin('season.competition', 'competition')
            ->where('season.name LIKE :q')
            ->setParameter('q', '%'.$q.'%')
            ->setMaxResults($p)
        ;

2 个答案:

答案 0 :(得分:5)

我们不能在这里发送三个参数,但我们可以这样做,

$em = \Zend_Registry::get('em');
        $qb_1 = $em->createQueryBuilder();
        $q_1 = $qb_1->select( "reprt_abs.id" )
        ->addSelect( "CONCAT( CONCAT(reporter.firstname, ' '),  reporter.lastname)" )
        ->from( '\Entities\report_abuse', 'reprt_abs' )
        ->leftJoin( 'reprt_abs.User', 'reporter' )
        ->getQuery()->getResult();

这部分就是你想要的:

  

$ qb_1-> select(“reprt_abs.id”)              - > addSelect(“CONCAT(CONCAT(reporter.firstname,''),reporter.lastname)”)

以下是我方的输出:

array (size=19)
  0 => 
    array (size=2)
      'id' => int 1
      1 => string 'Jaskaran Singh' (length=14)
  1 => 
    array (size=2)
      'id' => int 9
      1 => string 'Harsimer Kaur' (length=14)
  2 => 
    array (size=2)
      'id' => int 12
      1 => string 'Jaskaran Singh' (length=14)
  3 => 
    array (size=2)
      'id' => int 16
      1 => string 'Jaskaran Singh' (length=14)
  4 => 
    array (size=2)
      'id' => int 19
      1 => string 'Jaskaran Singh' (length=14)
  5 => 
    array (size=2)
      'id' => int 4
      1 => string 'shilpi jaiswal' (length=14)

答案 1 :(得分:0)

我在MySQL数据库PDO平台上使用Doctrine 2.4+的解决方案:

$concat = new Query\Expr\Func('CONCAT', $name[$k]);
$concat .= ' as ' . $k;
$concat = str_replace(',', ',\' \',', $concat);
$this->query->addSelect($concat);

所以$ name [$ k]是一个字段数组,可以随意添加。然后我用str_replace在字段之间添加一些间距。 $ k是concat字段的名称,因此$ concat的结果是

"CONCAT(p.email,' ', h.phoneNumber,' ', p.officialName) as details"