2011-11-13 62 views
-2

这是我的代码:无法使用DataFixtures加载数据

// 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.\nLorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.\nLorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.\nLorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.\nLorem ipsum dolor sit ameLorem ipsum dolor sit amet, consectetur adipiscing eletra electrify denim vel ports.\nLorem 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 protected]'); 
     $user1->setPassword('hah'); 


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


    } 

    function getOrder() 
    { 
     return 1 ; 
    } 

} 

但我发现了这个错误:

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\[email protected] 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

看来你是从线路获取标签$this->getReference('tag-1')不是招没有通过$em->persist($tag)其自我。

要么在使用文章上的标签冲洗实体管理器之前先坚持标签,要么将cascade={"persist"}添加到您的Article类中,并使用当前的代码。