【发布时间】:2017-10-26 23:02:12
【问题描述】:
RoundMatch.php
/**
* @ORM\Entity(repositoryClass="MyApp\MyBundle\Repository\RoundMatchRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"team_round_match" = "TeamRoundMatch", "player_round_match" = "PlayerRoundMatch"})
* @ORM\Table("my_round_match")
*/
abstract class RoundMatch
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="match_date", type="datetime")
*/
private $matchDate;
如何将相关实体加入受歧视的实体? 我无法直接访问已区分的表列来创建连接。
我无法访问已区分的表列来创建连接。 如何将子实体加入鉴别实体?
我创建了这样的连接:
RoundMatchRepository.php
public function getMatchesWithNoResultsSubmitted()
{
$qb = $this->createQueryBuilder("rm");
$qb->leftJoin("rm.round", "rnd" )
->leftJoin("rnd.group", "sg")
->leftJoin("sg.server", "ss")
->leftJoin("ss.stage", "ts")
->leftJoin("ts.tournament", "t")
->leftJoin("MyAppMyBundle:PlayerRoundMatch", "prm", "WITH", "rm.id = prm.id")
->leftJoin("prm.player1", "p1")
->leftJoin("prm.player2", "p2")
->leftJoin('p1.gameProfiles',"gp1")
->leftJoin('p2.gameProfiles',"gp2")
->leftJoin('p1.gameProfiles', 'gp1', "WITH", $qb->expr()->andX(
$qb->expr()->eq('t.game', 'gp1.game'),
$qb->expr()->eq('prm.player1', 'gp1.player')
))
->leftJoin('p1.gameProfiles', 'gp2', "WITH", $qb->expr()->andX(
$qb->expr()->eq('t.game', 'gp2.game'),
$qb->expr()->eq('prm.player2', 'gp2.player')
));
return $qb->getQuery()->getResult();
}
我想在树枝中使用结果对象,但我无法在返回的对象中获得连接的实体,因为它们不是通过对象关系连接的。 我没有创建对象关系,因为它们是通过鉴别器一对一连接的。
【问题讨论】:
-
看更多你的问题。就个人而言,我不认为表继承是您要求的答案。一场比赛可能应该有自己的日期记录。然后只是简单的关系
matchplayers,matchteam,playerteam.
标签: mysql symfony join doctrine discriminator