Doctrine/Foundry: является ли это индикатором плохого дизайна объекта ORM, если я отмечаю обратные ассоциации как не обнPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Doctrine/Foundry: является ли это индикатором плохого дизайна объекта ORM, если я отмечаю обратные ассоциации как не обн

Сообщение Anonymous »

Просто углубляюсь в написание тестов для PHP-приложений и теперь знакомлюсь с zenstruck/foundry.
Foundry предлагает разнообразные способы создания экземпляров сущностей. Что вызывает у меня проблемы, так это тот факт, что создание экземпляров объектов означает, что они будут сохраняться на ранних этапах (когда вызываются эти методы: new / createMany, createSequence / и т. д.).
Я знайте, что Foundry предлагает разнообразные способы подключения к процессу создания экземпляров. Но вопрос не в решении проблем с литейным обманом.
Во-первых, хочу узнать, является ли описанная ниже ассоциация индикатором плохого дизайна ORM? Если да, я его изменю, и Foundry заработает нормально, без ошибок — никаких хитростей не требуется.
У меня есть две сущности: Account и AccountSettings — они связаны через OneToOne (вопрос также относится к Ассоциации OneToMany).
Субъект Account.php:

Код: Выделить всё

    #[ORM\OneToOne(mappedBy: 'account', targetEntity: AccountSettings::class, orphanRemoval: true)]
private $accountSettings;
Субъект AccountSettings.php:

Код: Выделить всё

    #[ORM\OneToOne(inversedBy: 'accountSettings')]
#[ORM\JoinColumn(nullable: false)]
private ?Account $account = null;
Поскольку я хотел убедиться, что в базе данных нет несвязанных объектов AccountSetting, я установил для $account значение, не допускающее значения NULL.
Поэтому мне также необходимо создать AccountSettings для каждого объекта Account, созданного путем вызова AccountFactory::createMany(...).
Это, очевидно, не удается при использовании метода Foundry для создания этих созданий, который включает в себя сохранение объектов: потому что объект Account еще не сохранен, идентификатор базы данных отсутствует, поэтому я не могу создать объект AccountSettings на лету, вызвав AccountSettingsFactory::new().
Нет идентификатора базы данных для Учетная запись еще доступна, поэтому вызов приведет к исключению БД:

Код: Выделить всё

"Integrity constraint violation: 19 NOT NULL constraint failed: account_settings.account_id".
Я мог бы просто удалить атрибут, не допускающий значения NULL, но сначала я хотел знать: действительно ли этот атрибут не подходит/не подходит для такого типа ассоциации ORM?

Подробнее здесь: https://stackoverflow.com/questions/793 ... rk-reverse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»