Ошибка синтаксиса SQL отношения «один к одному» в Symfony

У меня есть два объекта 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, мне интересно, как это исправить.

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме