我有两个包含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生成的,所以我想知道如何解决此问题。
您是否知道可能导致这种情况的原因? 预先感谢。
答案 0 :(得分:0)
看看Doctrine Docs,了解如何处理双向一对一关系的拥有侧和反向侧。
您的问题是,您将两个实体都声明为拥有方。将一个实体的mappedBy
属性更改为inversedBy
,就可以了。