2013-06-23 7 views
5

私は、エンティティオブジェクトを互いに参照することに依存するデータフィクスチャをプロジェクトに追加しました。以下のようなデータ治具1でDoctrine Fixtureのリファレンスからどのようにエンティティを取得できますか?

、私が追加した実体参照:$ groupAdminと$ groupUserは、両方のグループ()の実体がある

  // GroupEntity_Fixtures.php file 
    $this->addReference('GROUP_USER', $groupUser); 
    $this->addReference('GROUP_ADMIN', $groupAdmin); 

。私の第二の固定具は、私は経由して私のUserエンティティにそれらのエンティティを追加したいファイルに:

   //UserEntity_Fixtures.php file 
      $userActive->addGroup($this->getReference('GROUP_USER')); 

$ userActiveはグループエンティティに多くの関係に多くを持つUserエンティティです。残念ながら、私が唯一、次のエラーをレンダリングするエンティティ自体のエンティティのプロキシに渡していない午前ようだ:

[Symfony\Component\Debug\Exception\ContextErrorException]      
    Catchable Fatal Error: Argument 1 passed to Blogger\BlogBundle\Entity\User: 
    :addGroup() must be an instance of Blogger\BlogBundle\Entity\groups, instan 
    ce of Proxies\__CG__\Blogger\BlogBundle\Entity\Group given, called in /home 
    /na/Practice/src/Blogger/BlogBundle/DataFixtures/ORM/CreateUserController_S 
    ignUpForm_UserEntity_Fixtures.php on line 27 and defined in /home/na/Practi 
    ce/src/Blogger/BlogBundle/Entity/User.php line 305 

私は、プロキシから、それは期待するエンティティへの参照を変換する方法を教えてください。


グループフィクスのためのコード:

<?php 
// DataFixtures/ORM/GroupEntity_Fixtrues.php 

namespace Blogger\BlogBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\OrderedFixtureInterface; 
use Doctrine\Common\DataFixtures\AbstractFixture; 
use Doctrine\Common\Persistence\ObjectManager; 
use Blogger\BlogBundle\Entity\User; 
use Blogger\BlogBundle\Entity\Group; 

class GroupEntity_Fixtures extends AbstractFixture implements OrderedFixtureInterface 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(ObjectManager $manager) 
    { 
     $groupUser = new Group(); 
     $groupUser->setName('GROUP_USER'); 
     $groupUser->setRole('ROLE_USER'); 
     $manager->persist($groupUser); 

     $groupAdmin = new Group(); 
     $groupAdmin->setName('GROUP_ADMIN'); 
     $groupAdmin->setRole('ROLE_USER,ROLE_ADMIN'); 
     $manager->persist($groupAdmin); 

     $manager->flush(); 

     $this->addReference('GROUP_USER', $groupUser); 
     $this->addReference('GROUP_ADMIN', $groupAdmin); 
    } 

    public function getOrder() 
    { 
     return 1; 
    } 
} 

コードユーザー治具用

<?php 
// DataFixtures/ORM/CreateUserController_SignUpForm_UserEntity_Fixtrues.php 

namespace Blogger\BlogBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\OrderedFixtureInterface; 
use Doctrine\Common\DataFixtures\AbstractFixture; 
use Doctrine\Common\Persistence\ObjectManager; 
use Blogger\BlogBundle\Entity\User; 
use Blogger\BlogBundle\Entity\Group; 

class CreateUserController_SignUpForm_UserEntity_Fixtures extends AbstractFixture implements OrderedFixtureInterface 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(ObjectManager $manager) 
    { 
     $groupUser2 = new Group(); 
     $groupUser2->setName('GROUP_USER'); 
     $groupUser2->setRole('ROLE_USER'); 
     $manager->persist($groupUser2); 

     // This person represents an active (email verified) user. 
     $userActive = new User(); 
     $userActive->setPassword("passwordActive"); 
     $userActive->setEmail("[email protected]"); 
     $userActive->setUserName("testActive"); 
     $userActive->setPassword(crypt($userActive->getPassword(),$userActive->getSalt())); 
     $userActive->setEmailToken(md5(uniqid(rand(), true))); 
     $userActive->addGroup($groupUser2); 
     //$userActive->getGroups()->add($groupRepository->getGroupByName("BASIC_USER")); 

     // This person represents an unactive (email not verified) user. 
     $userUnactive = new User(); 
     $userUnactive->setPassword("passwordUnactive"); 
     $userUnactive->setEmail("[email protected]"); 
     $userUnactive->setUserName("testUnactive"); 
     $userUnactive->setPassword(crypt($userUnactive->getPassword(),$userUnactive->getSalt())); 
     $userUnactive->setEmailToken(md5(uniqid(rand(), true))); 

     // Persist objects into the database 
     $manager->persist($userActive); 
     $manager->persist($userUnactive); 
     $manager->flush(); 

    } 

    public function getOrder() 
    { 
     return 2; 
    } 
} 

グループエンティティのためのコード:

/** 
* @ORM\ManyToMany(targetEntity="User", inversedBy="groups") 
*/ 
private $users; 

コードユーザエンティティのために:

/** 
* @ORM\ManyToMany(targetEntity="Group", mappedBy="users") 
*/ 
protected $groups; 

追加したグループMethos:

/** 
* Add groups 
* 
* @param \Blogger\BlogBundle\Entity\groups $groups 
* @return User 
*/ 
public function addGroup(\Blogger\BlogBundle\Entity\groups $groups) 
{ 
    $this->groups[] = $groups; 

    return $this; 
} 
+0

" Blogger \ BlogBu​​ndle \ Entity \ grou ps "が奇妙に見えますが、あなたのaddGroupメソッドでタイプヒントが正しいですか? – wgcrouch

+0

もう1つ、addGroup()メソッドのコードを投稿できますか?あなたがタイプミスをしているように見える – wgcrouch

+0

タイプヒントとは何ですか?そのための注釈は次のようになります: /** * @ORM \ ManyToMany(targetEntity = "User"、inversedBy = "groups") */ –

答えて

3

前記addGroupメソッドは、間違った型のヒントがあります:

それは次のようになります。

/** 
* Add groups 
* 
* @param \Blogger\BlogBundle\Entity\Group $groups 
* @return User 
*/ 
public function addGroup(\Blogger\BlogBundle\Entity\Group $groups) 
{ 
    $this->groups[] = $groups; 

    return $this; 
} 

予告「\ブロガー\ BlogBu​​ndle \エンティティ\グループ "の代わりに" \ Blogger \ BlogBu​​ndle \ Entity \ groups "

+0

ありがとうございました。私の教義がその方法を間違って作り出したかどうかわかりません。 –

+0

ええ、あなたはそれを調べる必要があります他の方法が間違っている可能性があります。私はなぜこの場合に間違っていたのか分からない。別の質問の価値があるかもしれません – wgcrouch