#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
, и все должно быть в порядке.