У меня есть шаблон объекта и еще один запрос. По сути, шаблон представляет собой html-форму, и запрос будет представлять набор значений, заполненных формой, и ссылку на идентификатор шаблона.
class Request { /** * @Id @Column(type="integer") * @GeneratedValue */ private $id; /** * @ManyToOne(targetEntity="Template", cascade={"persist"}) * @JoinColumn(name="templateId", referencedColumnName="id", nullable=false) */ private $template; ...
То, что я пытаюсь достичь, заключается в том, что когда запрос загружается из БД, тогда объект получает соответствующий объект Template со всеми его данными. Однако, когда запросы сохраняются, нет необходимости также сохранять шаблон … таким образом, cascade = {"persist"} не должно быть.
1- Загрузите все шаблоны из db 2- Пользователь выбирает шаблон из выпадающего списка. 3 Tmeplate показывает на экране, а пользователь заполняет его в 4-м запросе.
$request = new \entities\Request(); //template already exist in the db $template = $this->templateRepository->fetchTemplate(1); $request->template = $template; ... $this->entityManager->persist($request); $this->entityManager->flush();
Теперь проблема в том, что когда я использую casade persist, он сохраняет другой шаблон в таблице шаблонов. Если я не использую каскад, сохраняйте его ошибки:
Неустранимая ошибка: исключить исключение «Doctrine \ ORM \ ORMInvalidArgumentException» с сообщением «Новый объект был найден через объекты отношений« Request # template », которые не были сконфигурированы для каскадирования операций persist для сущности: entity \ Template @ 00000000343e07770000000073e3b0ec. Чтобы решить эту проблему: либо явно вызовите EntityManager # persist () на этом неизвестном объекте, либо сконфигурируйте каскад, сохраняйте эту ассоциацию в сопоставлении, например, @ManyToOne (.., cascade = {"persist"}). Если вы не можете узнать, какой объект вызывает проблему, реализуйте «сущности \ Template #__ toString ()», чтобы получить подсказку ». в C: \ Development \ wamp \ www \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ ORMInvalidArgumentException.php в строке 59
Какова правильная настройка отношений Doctrine для достижения желаемого поведения?