Symfony一对一关系SQL语法错误

问题描述 投票:0回答:1

我有两个包含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生成的,我想知道如何解决这个问题。

你知道是什么原因引起的吗?提前致谢。

mysql symfony
1个回答
0
投票

看看Doctrine Docs如何处理双向关系的拥有方和反方。

这里的问题是您将两个实体都声明为拥有方。将一个实体的mappedBy属性更改为inversedBy,你应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.