Symfony一对一关系SQL语法错误

时间:2019-03-18 20:05:26

标签: mysql symfony

我有两个包含OneToOne关系的教义实体(AugustusGame和AugustusBoard):每个游戏都有一个局,每个局都有一个局。

AugustusGame:

/**
 * @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生成的,所以我想知道如何解决此问题。

您是否知道可能导致这种情况的原因? 预先感谢。

1 个答案:

答案 0 :(得分:0)

看看Doctrine Docs,了解如何处理双向一对一关系的拥有侧和反向侧。

您的问题是,您将两个实体都声明为拥有方。将一个实体的mappedBy属性更改为inversedBy,就可以了。