关于多对一关系的学说查询

时间:2017-01-25 11:31:40

标签: mysql database symfony doctrine-orm

在我关于Symfony2的Padel项目中,我有竞争 - 注册关系

在"比赛"实体:

 /**
 * @ORM\OneToMany(targetEntity="Registration", mappedBy="competition")
 */
protected $registrations;

关于"注册"实体:

/**
 * @ORM\ManyToOne(targetEntity="PadelSchedule\UserBundle\Entity\User", inversedBy="registrations")
 * @ORM\JoinColumn(name="idPlayer", referencedColumnName="id")
 */
private $player;

/**
 * @ORM\ManyToOne(targetEntity="Competition", inversedBy="registrations")
 * @ORM\JoinColumn(name="idCompetition", referencedColumnName="id")
 */
private $competition;

像这样的东西。我需要做的是,拥有玩家的ID,获得该玩家注册的比赛清单。

我得到的关键是使用此查询的连接:

    $qb = $em->createQueryBuilder()
            ->select('r, c')
            ->from('PadelScheduleMainBundle:Registration', 'r')
            ->leftJoin('r.competition', 'c')
            ->where('r.player = :idPlayer')
            ->setParameter('idPlayer', $idPlayer);

但是,由于我得到的错误似乎,我认为我通过这是一个注册列表与竞争加入,但我需要我的观点是一个"竞争"对象。

有任何帮助吗?谢谢!

2 个答案:

答案 0 :(得分:3)

由于您从注册实体中选择,您将获得注册结果。也许你有更好的运气使用这样的查询:

$em->createQueryBuilder()
    ->select('c')
    ->from('PadelScheduleMainBundle:Competition', 'c')
    ->innerJoin('c.registrations', 'r')
    ->where('r.player = :player')
    ->setParameter('player', $playerId)

答案 1 :(得分:1)

根据您的查询问题..我已经写了这个查询..请使用此查询尝试

$query = $em->createQuery(
    'SELECT c
     FROM PadelScheduleMainBundle:Competition c
     INNER JOIN c.registrations r
     WHERE r.player = :idPlayer')
->setParameter('idPlayer', $idPlayer);