Синтаксическая ошибка SQL отношения Symfony один к одному

#mysql #symfony

#mysql #symfony

Вопрос:

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

AugustusGame :

 /**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORMOneToMany(targetEntity="AGORAGameAugustusBundleEntityAugustusPlayer", mappedBy="game")
 */
private $players;

/**
 * @ORMOneToOne(targetEntity="AGORAGameAugustusBundleEntityAugustusBoard", mappedBy="game",cascade={"persist"})
 */
private $board;
  

AugustusBoard :

 /**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * 
 * @ORMOneToMany(targetEntity="AGORAGameAugustusBundleEntityAugustusCard", mappedBy="board", cascade={"persist"})
 */
private $deck;

/**
 * @ORMOneToMany(targetEntity="AGORAGameAugustusBundleEntityAugustusCard", mappedBy="board", cascade={"persist"})
 */
private $objLine;

/**
 * @ORMOneToOne(targetEntity="AGORAGameAugustusBundleEntityAugustusGame", 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'
  

Очевидно, что это не лучший способ написать ЛЕВОЕ соединение, но поскольку оно генерируется Symfony, мне интересно, как это исправить.

У вас есть какие-либо идеи о том, что могло вызвать это? Заранее спасибо.

Ответ №1:

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

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