Php 使用QueryBuilder在ZF2和Doctrine中创建一个具有多对多关系的查询

Php 使用QueryBuilder在ZF2和Doctrine中创建一个具有多对多关系的查询,php,doctrine-orm,zend-framework2,many-to-many,query-builder,Php,Doctrine Orm,Zend Framework2,Many To Many,Query Builder,用户信息: namespace Module\Entity; use Doctrine\ORM\Mapping as ORM; use Zend\Stdlib\Hydrator; /** * Info * * @ORM\Table(name="user_info") * @ORM\Entity * @ORM\HasLifecycleCallbacks * @ORM\Entity(repositoryClass="Module\Entity\InfoRepository") */

用户信息:

namespace Module\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Stdlib\Hydrator;

/**
 * Info
 *
 * @ORM\Table(name="user_info")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Entity(repositoryClass="Module\Entity\InfoRepository")
 */
class Info
{
    /**
     * @var ArrayCollection $champions
     *
     * @ORM\ManyToMany(targetEntity="Module\Entity\Champion", inversedBy="infos")
     */
    private $champions;
}
冠军:

namespace Module\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Stdlib\Hydrator;

/**
 * Champion
 *
 * @ORM\Table(name="champion")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Entity(repositoryClass="Module\Entity\ChampionRepository")
 */
class Champion
{
    /**
     * @var ArrayCollection $infos
     *
     * @ORM\ManyToMany(targetEntity="Module\Entity\Info", mappedBy="champions")
     */
    private $infos;
}
此代码工作并在数据库中创建了一个表
info\u champion

我想使用doctrine
QueryBuilder
仅选择包含与某个特定champion关系的信息,如以下SQL查询:

SELECT i.* FROM `user_info` AS i 
  LEFT JOIN info_champion ic ON ic.info_id = i.id 
  WHERE ic.champion_id = 2;

在用户信息存储库中:

$queryBuilder = $this->createQueryBuilder('i')
    ->addSelect('ic') //only needed if you want to fetch join...
    ->innerJoin('i.champions', 'ic')
    ->where('ic.id = :champion_id')
    ->setParameter('champion_id', 2);

$query = $queryBuilder->getQuery();

return $query->getResult();