У меня есть два объекта Doctrine (AugustusGame и AugustusBoard), которые содержат отношение OneToOne: у каждой игры есть 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;
И когда я пытаюсь получить игру по ее идентификатору, она выдает 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, мне интересно, как это исправить.
У вас есть какие-либо идеи о том, что может быть причиной этого? Заранее спасибо.






Взгляните на Документы доктрины, чтобы узнать, как работать со стороной-владельцем и обратной стороной двунаправленного отношения one-to-one.
Ваша проблема здесь в том, что вы объявили обе сущности стороной-владельцем. Измените атрибут mappedBy на одном объекте на inversedBy, и все будет в порядке.