dpdbu24262 2011-11-13 20:17
浏览 21
已采纳

无法使用DataFixtures加载数据[关闭]

This is my code:

// my  article fixture 

<?php

namespace My\BlogBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use My\BlogBundle\Entity\Article;
use My\BlogBundle\Entity\User;
use My\BlogBundle\Entity\Tag;

class ArticleFixtures extends AbstractFixture implements OrderedFixtureInterface
{

    function load($em)
    {
        $article1 = new Article();
        $article1->setCreatedAt(new \Datetime);
        $article1->setTitle('hello my title test');
        $article1->setContent('Lorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.
Lorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.
Lorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.
Lorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.
Lorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.
Lorem ipsum dolor sit ame');

        $article1->setUser($em->merge($this->getReference('user-1')) );
        $article1->addTag( $em->merge($this->getReference('tag-1') ) );

        $em->persist($article1);
        $em->flush() ;

    }

    function getOrder()
    {
        return 3 ;  
    }

}



// my tag fixture


<?php

namespace My\BlogBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use My\BlogBundle\Entity\Tag;

class TagFixtures extends AbstractFixture implements OrderedFixtureInterface
{

    function load($em)
    {
        $tag = new Tag();
        $tag->setNom('tagTest') ;

        $em->persist($tag);
        $em->flush();
        $this->addReference('tag-1' ,$tag);


    }

    function getOrder()
    {
        return 2;
    }   

}   

// my user fixtures

<?php

namespace My\BlogBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use My\BlogBundle\Entity\User;

class UserFixtures extends AbstractFixture implements OrderedFixtureInterface
{
    function load($em)
    {
        $user1 = new User() ;
        $user1->setPseudo('xsaidx');
        $user1->setEmail('email@mail.com');
        $user1->setPassword('hah');


        $em->persist($user1);
        $em->flush();
        $this->addReference('user-1' ,$user1);      


    }

    function getOrder()
    {
        return 1 ;
    }

}

But I'm getting this error:

A new entity was found through the relationship 'My\BlogBundle\Entity\Article#tags' that was not configured to cascade persist operations for entity: Doctrine\Common\Collections\ArrayCollection@000000003d8f1786000000003709f23. Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'My\BlogBundle\Entity\Tag#__toString()' to get a clue.

  • 写回答

1条回答 默认 最新

  • dongshi3361 2011-11-13 22:24
    关注

    Seems that the tag you are fetching from the line $this->getReference('tag-1') hasn't been through a $em->persist($tag) its self.

    Either persist your tag first before flushing the entity manager with the tag on the article or you can add cascade={"persist"} to your collection on the Article class and use your current code.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?