我有一个实体模板和另一个请求。本质上,模板代表一个 html 表单,请求将代表表单填充的值的集合以及对模板 ID 的引用。
class Request {
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
/**
* @ManyToOne(targetEntity="Template", cascade={"persist"})
* @JoinColumn(name="templateId", referencedColumnName="id", nullable=false)
*/
private $template;
...
我想要实现的是,当从数据库加载请求时,该对象将保存相关的模板对象及其所有数据。但是,当保存请求时,也不需要保存模板......因此,cascade={"persist"} 不应该在那里。
1-从数据库加载所有模板
2-用户从下拉列表中选择一个模板
3- 模板显示在屏幕上并且用户填写它
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”,消息为“通过关系“entities\Request#template”找到了一个新实体,该实体未配置为实体的级联持久操作:entities\Template@00000000343e07770000000073e3b0ec。要解决此问题: 对此未知实体显式调用 EntityManager#persist() 或配置级联以在映射中保留此关联,例如 @ManyToOne(..,cascade={"persist"})。如果您无法找出导致问题的实体,请执行“entities\Template#__toString()”来获取线索。在 C:\Development\wamp\www\vendor\doctrine\orm\lib\Doctrine\ORM\ORMInvalidArgumentException.php 第 59 行
实现所需行为的正确教义关系设置是什么?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)