3

我有一个非常基本的架构,如下所示:

评论.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 ...

现在,一切正常。我可以PagesComments反转。问题是,当我尝试向数据库插入行时,它说page_idnull.

例子:

$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 一起获取。

4

1 回答 1

3

当您想将页面添加到评论实体时您应该调用一个方法,$comment->setPage($page)如果您使用php app/console doctrine:generate:entities命令行,则会自动生成此方法。$page 对象应该是从数据库加载的 $page 对象。例如

$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();

如果这对您没有帮助,请从您的控制器以及页面和评论实体发布您的代码。

于 2012-10-18T21:27:25.780 回答