用户信息:
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_champion
。
我只想使用原则QueryBuilder
选择包含与某个特定冠军关系的信息,比如下面的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();