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
我想使用doctrineQueryBuilder
仅选择包含与某个特定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();