我有两个包含OneToOne关系的Doctrine实体(Augustus Game和Augustus Board):每个游戏有1个棋盘,每个棋盘有1个游戏。
奥古斯都游戏:
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="AGORA\Game\AugustusBundle\Entity\AugustusPlayer", mappedBy="game")
*/
private $players;
/**
* @ORM\OneToOne(targetEntity="AGORA\Game\AugustusBundle\Entity\AugustusBoard", mappedBy="game",cascade={"persist"})
*/
private $board;
AugustusBoard:
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
*
* @ORM\OneToMany(targetEntity="AGORA\Game\AugustusBundle\Entity\AugustusCard", mappedBy="board", cascade={"persist"})
*/
private $deck;
/**
* @ORM\OneToMany(targetEntity="AGORA\Game\AugustusBundle\Entity\AugustusCard", mappedBy="board", cascade={"persist"})
*/
private $objLine;
/**
* @ORM\OneToOne(targetEntity="AGORA\Game\AugustusBundle\Entity\AugustusGame", mappedBy="board", cascade={"persist"})
*/
private $game;
当我尝试通过其ID获取游戏时,它会产生严重的语法SQL请求:
$augGame = $this->manager->getRepository('AugustusBundle:AugustusGame')->find($gameId);
像这样:
'SELECT t0.id AS id_1, t10.id AS id_11, t10.tokenBag AS tokenBag_12
FROM augustus_game t0
LEFT JOIN augustus_board t10 ON WHERE t0.id = 16'
显然,这不是编写LEFT JOIN的好方法,但由于它是由Symfony生成的,我想知道如何解决这个问题。
你知道是什么原因引起的吗?提前致谢。
看看Doctrine Docs如何处理双向关系的拥有方和反方。
这里的问题是您将两个实体都声明为拥有方。将一个实体的mappedBy
属性更改为inversedBy
,你应该没问题。