Intereting Posts
Передача переменной с одной страницы на другую в php для динамического заполнения открываемых тегов Facebook Разбор массива JSON для сервера с Swift 3.0 Как изменить время на сервере Apache, чтобы оно соответствовало времени компьютера (PHP)? Какова рекомендуемая установка error_reporting () для разработки? Как насчет E_STRICT? Разница STRCHR и STRRCHR? PHP Неустранимая ошибка: «Swift_TransportException» с сообщением «Не удалось выполнить проверку подлинности на SMTP-сервере SilverStripe: изменение порядка входных элементов GridField CORS, когда клиент и сервер являются localhost? Считать элементы по условию с помощью XML и PHP? Как проверить, является ли метка времени часом? Лучший способ кэширования PHP Использовать браузеры для загрузки файла, а не открытия Не удается получить результаты от SearchQuery () в фратах методы конструктора в интерфейсах PHP-захват массивов для создания строк кода

Два атрибута, разделяющих одно отношение OneToMany с одним объектом Symfony2

Давайте сначала опишем мою ситуацию. Я использую Symfony2, и у меня проблема с отношениями между моими сущностями.

У меня есть два объекта, которые связаны друг с другом. Эти два объекта: AssociationQuestion и AssociationPossibleAnswer . В настоящее время я создаю информационное программное обеспечение, где нужно связать один возможный ответ слева с другим возможным ответом справа, например, в следующем примере:

В настоящее время я планирую наличие двух атрибутов, которые являются массивами в классе AssociationQuestion которые будут содержать многие объекты AssociationPossibleAnswer . Первый массив будет содержать возможные ответы слева, а второй – возможные ответы справа.

Поэтому для меня, похоже, у меня было бы два отношения oneToMany в AssociationQuestion

 AssociationQuestion: oneToMany: possibleAnswersLeft: targetEntity: AssociationPossibleAnswer mappedBy: associationQuestion possibleAnswersRight: targetEntity: AssociationPossibleAnswer mappedBy: associationQuestion 

Затем, в AssociationPossibleAnswer , у меня будет одно отношение ManyToOne:

 AssociationPossibleAnswer: manyToOne: associationQuestion: targetEntity: AssociationQuestion 

Проблема в том, что я получаю следующую ошибку, пытающуюся подтвердить мою доктрину. Кажется, что у вас не может быть двух объектов, связанных с тем, что я хотел бы сделать …

 * The field AssociationQuestion#possibleAnswersLeft is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity AssociationPossibleAnswer#associationQuestion does not contain the required 'inversedBy=possibleAnswersLeft' attribute. * The field AssociationQuestion#possibleAnswersRight is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity AssociationPossibleAnswer#associationQuestion does not contain the required 'inversedBy=possibleAnswersRight' attribute. 

Мне интересно, если это правильный способ установить мои отношения между двумя моими сущностями. Возможно ли иметь два атрибута, указывающих на сущность, в то время как в конце объект не знает, с какого атрибута он указывает.

Этот случай не может быть разрешен с помощью ассоциаций OneToMany.

Вам нужно 2 различных отношения между AssociationQuestion и AssociationPossibleAnswer . Как вы его настроили, у вас есть только одно отношение. Просто посмотрите на 1 ассоциацию ManyToOne, созданную вами в AssociationPossibleAnswer .

И вы пытаетесь иметь две противоположные стороны этого отношения, что теоретически невозможно. Отношение может иметь только 2 конечных точки (не 3).

Решение

Внедрите 2 (однонаправленные) ассоциации ManyToMany в AssociationQuestion и сделайте внешний ключ, указывающий на уникальную возможность AssociationPossibleAnswer :

 class AssociationQuestion { /** * @ORM\ManyToMany(targetEntity="AssociationPossibleAnswer") * @ORM\JoinTable(name="association_question_association_possible_answer_left", * joinColumns={@ORM\JoinColumn(name="association_question_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="association_possible_answer_id", referencedColumnName="id", unique=true)} * ) */ private $possibleAnswersLeft; /** * @ORM\ManyToMany(targetEntity="AssociationPossibleAnswer") * @ORM\JoinTable(name="association_question_association_possible_answer_right", * joinColumns={@ORM\JoinColumn(name="association_question_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="association_possible_answer_id", referencedColumnName="id", unique=true)} * ) */ private $possibleAnswersRight; // ... 

Доктрина называет это ассоциацией « Одно-ко-многим», однонаправленной с объединенной таблицей .