Intereting Posts
Можно ли изменить переменную $ _SESSION на стороне клиента? Реализация Shunting Yard в PHP необходима, интерпретирует и анализирует строку, выполняет математическое сравнение и возвращает логический результат Javascript эквивалент списка PHP () php array_column с несущественным индексом возвращает неверный индекс Включить функции семафора PHP на MAMP Переменные статической функции и конкатенация в PHP Подготовленный оператор не позволяет мне называть $ mysqli-> stmt_init () PHP: Когда временные загруженные файлы удаляются? Класс ZMQContext не найден, даже если ZMQ установлен Как переключить файлы макета в Zend Framework? Laravel правильно определяет компоновку по умолчанию от контроллера как получить максимальную длину этой функции socket_recv () в PHP preg_match: ничего не повторять / нет. Как хранить ежедневные записи из таблицы mysql в другую? Файлы Laravel Session, которые не очищаются из папки framework / session

Доктрина один-к-одному однонаправленная

В Symfony 3 с Doctrine я пытаюсь получить одностороннее однонаправленное отношение к обеим таблицам, использующим один и тот же первичный ключ. Для этого я пытаюсь воспроизвести пример на странице « Сопоставление ссылок на доктрину» .

Тем не менее, индивидуальная документация uni не имеет примеров сеттеров и геттеров – и также нет определения поля id на целевом объекте. Поэтому я попытался экспериментировать вокруг себя.

Это мои сущности:

class Country { /** * @var integer * * @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @ORM\OneToOne(targetEntity="MySubEntity", cascade={"persist", "remove"}) * @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=true) */ private $mysubentity; [...] /** * @return MySubEntity */ public function getMySubEntity() { return $this->mysubentity; } /** * @param MySubEntity $mysubentity */ public function setMySubEntity($mysubentity) { $this->mysubentity = $mysubentity; } } class MySubEntity { /** * @var integer * * @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; [..] /** * Set id * * @param $id * * @return MySubEntity */ public function setId($id) { $this->id = $id; return $this; } /** * Get id * * @return int */ public function getId() { return $this->id; } } 

Когда я сохраняю объект страны, я получаю Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails . При проверке данных я вижу, что Doctrine попыталась установить id MySubEntity равным 0.

Кто-нибудь знает, что мне нужно сделать для того, чтобы поле MySubEntity $ id было автоматически заполнено из страны страны?

Вам нужно изменить свойство name JoinColumn на что-либо еще, но не на id:

 /** * @ORM\OneToOne(targetEntity="MySubEntity", cascade={"persist", "remove"}) * @ORM\JoinColumn(name="mysubentity_id", referencedColumnName="id", nullable=true) */ private $mysubentity; 

Что это делает: JoinColumn сообщает доктрине, в которой столбец базы данных сохраняет отношение. поэтому, если вы назовёте его mysub_id, ваш основной объект будет иметь столбец с таким именем, в котором значение ссылочной точки будет сохранено (id вашего субэйнтита).

Если вы говорите, что имя JoinColumn – это идентификатор, который уже используется первичным ключом вашего объекта, у вас конфликт.

Редактировать:

Я пропустил вашу точку с использованием одного и того же первичного ключа. Есть ли какая-то конкретная причина для этого? Но если вам действительно нужно сделать это по унаследованным причинам, посмотрите на

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html#use-case-2-simple-derived-identity

или возможность генерировать значение первичного ключа вашего субЭффекта самостоятельно, изменяя стратегию генерации (NONE или custom в этом случае)

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#identifier-generation-strategies