В моем объекте изображения у меня есть атрибут изображения. (Другие атрибуты: alt, style и т. Д.). Я заметил, что атрибут не был установлен как nullable = false. Я решил изменить это, и после выполнения обновления схемы доктрины я заметил, что столбец image_id по-прежнему установлен как обнуляемый.В Symfony2/Doctrine: установка внешнего ключа, чтобы не было нуля, кажется невозможным в отношениях один к одному
Это привело меня к переосмыслению моего дизайна и установлению объекта «Изображение» вместо объекта Image. Я попробую еще раз. Обычно я избегаю классового наследования с моими связанными с файлами объектами в Доктрине, потому что это вызывает слишком много проблем.
Однако я хотел бы знать. Ожидается ли поведение от доктрины? Так что мои отношения «один к одному» были установлены как обнуляемые. Нельзя ли сделать их недействительными? Это имело бы смысл, поскольку два тесно связанных объекта могут быть лучше, чтобы быть одним объектом. Однако я бы подумал, что такая озабоченность должна быть оставлена по выбору разработчика. Как и в моем случае, поскольку я не желаю использовать наследование для объекта изображения.
Официальная документация на самом деле не является явной, хотя все примеры показывают недействительные внешние ключи.
Вот код:
/**
* @var
*
* @ORM\OneToOne(targetEntity="AnyRoutes\SiteBundle\Entity\Image", cascade={"persist", "remove"})
* @@ORM\JoinColumn(name="image_id", referencedColumnName="id", nullable=false)
*/
private $image;
Да это сделал ... Спасибо большое. Я становлюсь слепым, как крота! Я удивлен, что Doctrine позволяет мне обновлять схемы, не выдавая сообщение об ошибке синтаксиса. – user3208611
@ user3208611, потому что в большинстве случаев @ORM \ JoinColumn является необязательным и имеет разумные значения по умолчанию, поэтому он не нужен. http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-one-unidirectional – LPodolski