Ошибка синтаксиса SQL отношения один к одному Symfony - PullRequest
0 голосов
/ 18 марта 2019

У меня есть две доктрины (AugustusGame и AugustusBoard), которые содержат отношение OneToOne: каждая игра имеет 1 доску, а каждая доска имеет 1 игру.

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;

И когда я пытаюсь получить Игру по ее идентификатору, она выдает плохо синтаксический 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 голосов
/ 19 марта 2019

Взгляните на Doctrine Docs о том, как иметь дело со стороной-владельцем и обратной стороной двунаправленных однонаправленных отношений.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...