我有一个非常基本的架构:
Comments.yml:
manyToOne:
pages:
targetEntity: Pages
inversedBy: comments
joinColumn:
name: page_id
referencedColumnName: idx
... other things ...
Pages.yml:
oneToMany:
comments:
targetEntity: Comments
mappedBy: pages
cascade: ["persist"] // i added this later but has no effect for both persist and merge.
orderBy:
idx: desc
... other things ...
现在,一切正常。我可以从Pages
和反向获得Comments
。问题是,当我尝试将新行插入数据库时,它表示page_id
为null
。
示例:
$comment = new Comments();
$comment->setPageId(2); // it is "2"
$comment->setText($textData);
$this->_em->persist($comment);
$this->_em->flush($comment);
现在结果是假的。它会引发异常,并说SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "page_id" violates not-null constraint
。
嗯,如果我删除oneToMany和ManyToOne关系,它就可以了!如果我使用它们就会说它即使我给它也是空的...
我的错误在哪里?任何帮助或想法都表示赞赏!
修改:
我找到了这种方法:getReference()
$item = $em->getReference('MyProject\Model\Item', $itemId);
$cart->setPage($item);
现在正在工作,但我不知道这是否正确。请注意我。
基本上,我想添加评论,不用修改(不删除或更新)页面表。但是,我想将它们作为ManyToOne和OneToMany一起获取。
答案 0 :(得分:3)
当您想要向Comments实体添加页面时您应该调用$comment->setPage($page)
之类的方法如果使用php app/console doctrine:generate:entities
命令行,则会自动生成此方法。 $ page对象应该是从数据库加载的$ page对象。 e.g。
$page = $this->getDoctrine()->getRepository('Pages')->findOneBy(array('id' => $pageId));
$comment = new Comments();
$comment->setPage($page);
$comment->setText($textData);
$this->_em->persist($comment);
$this->_em->flush();
如果这对您没有帮助,请从您的控制器以及页面和评论实体发布您的代码。