Справочная информация (короткая версия): приложение Symfony4, в котором я использую пользовательский уровень данных поверх уровня сущности доктрины, чтобы уровень бизнес-логики не зависел от схемы базы данных.Это не изменчиво на данный момент.
В некоторых случаях проще использовать внешний ключ, сопоставленный как поле:
/**
* @var string
*
* @ORM\Column(name="article_id", type="string")
*/
protected $articleId;
, но в других случаях для того же объекта мне нужно соотношение:
/**
* @var Article
*
* @ORM\OneToOne(targetEntity="Article")
* @ORM\JoinColumn(name="article_id", referencedColumnName="id")
*/
protected $article;
чтобы не иметь одну и ту же сущность в 2-х экземплярах, я добавил приведенные выше фрагменты в одном классе.Если я гидратирую отношение, все работает хорошо ($ articleId игнорируется), но если указан только $ articleId, а $ article равен null, doctrine вставит в DB null для внешнего ключа.