Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 实体关系学说_Php_Doctrine Orm_Doctrine - Fatal编程技术网

Php 实体关系学说

Php 实体关系学说,php,doctrine-orm,doctrine,Php,Doctrine Orm,Doctrine,我有一个实体模板和另一个请求。从本质上讲,模板表示html表单,请求表示表单中填充的值的集合和对模板id的引用 class Request { /** * @Id @Column(type="integer") * @GeneratedValue */ private $id; /** * @ManyToOne(targetEntity="Template", cascade={"persist"}) * @JoinColumn(name="templateId", referen

我有一个实体模板和另一个请求。从本质上讲,模板表示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;

...
我试图实现的是,当从DB加载请求时,对象会包含相关的模板对象及其所有数据。但是,在保存请求时,也不需要保存模板。。。因此,cascade={“persist”}不应该存在

1-从数据库加载所有模板 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时,它会在templates表中保存另一个模板。如果我不使用cascade持久化错误:

致命错误:未捕获异常“条令\ORM\ORMInvalidArgumentException”,消息“通过关系“entities\Request\template”找到了一个新实体,该关系未配置为级联实体:entities的持久化操作\Template@00000000343e07770000000073e3b0ec. 要解决此问题,请对此未知实体显式调用EntityManager#persist(),或在映射中配置cascade persist此关联,例如@manytone(..,cascade={“persist”})。如果您无法找到导致问题的实体,请在C:\Development\wamp\www\vendor\doctrine\orm\lib\doctrine\orm\orm\ORMInvalidArgumentException.php的第59行实现“entities\Template\uuuu toString()”以获取线索


实现所需行为的正确原则关系设置是什么?

为什么不使用这样的setter
$request->setTemplate($template)?我不熟悉条令,使用setter时有什么区别?请阅读:但是$template是私有的,我对请求实体的属性有\uuuu get,虽然这是相同的,但我看不出您使用的是\uu get(),但是现在ye也有意义,因为您声明它也是私有的。执行
\doctor\Common\Util\Debug::dump($template)时,您看到了什么
\Doctrine\Common\Util\Debug::dump($request)