Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Not null violation: 7" when using manyToOne and oneToMany relations on Doctrine2

I have a very basic schema like this:

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

Now, everything is working just fine. I can get Pages from Comments and reverse. The problem is, when i try to insert a new row to the database, it says page_id is null.

Example:

$comment = new Comments();
$comment->setPageId(2); // it is "2"
$comment->setText($textData);

$this->_em->persist($comment);
$this->_em->flush($comment);

Now the result is false. It throws an exception and says SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "page_id" violates not-null constraint.

Well, if i remove the oneToMany and ManyToOne relations, it works! If i use them it says it is null even if i give it...

Where is my mistake? Any help or idea is appreciated!

EDIT:

I found this method: getReference()

$item = $em->getReference('MyProject\Model\Item', $itemId);
$cart->setPage($item);

Now it is working but i do not know if this is the correct way. Please inlight me.

Basically, i want to add a comment without modifying (not remove nor update) the page table. But, i want to fetch them together as ManyToOne and OneToMany.

like image 628
xangr Avatar asked Dec 06 '25 09:12

xangr


1 Answers

When You want to add a page to the Comments entity You should call a method like $comment->setPage($page) this method is automatically generated if you use the php app/console doctrine:generate:entities command line. The $page object should be the $page object loaded from the database. 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();

If this doesn't help You, please post your code from your controller and the pages and comments entity.

like image 109
jovobe Avatar answered Dec 07 '25 22:12

jovobe