首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 2.6,引入其他包存储库,容器注意到夹具

Symfony 2.6,引入其他包存储库,容器注意到夹具
EN

Stack Overflow用户
提问于 2015-03-02 19:20:54
回答 1查看 344关注 0票数 1

我试图从数据固定文件中的另一个包实体存储库中提取数据,为此,我试图实现容器,但它不工作,有什么方法可以从数据固定文件中运行对另一个包实体存储库的查询吗?

评论装置

代码语言:javascript
复制
namespace DomNoble\BlogBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use DomNoble\BlogBundle\Entity\Blog\Comments;
use DomNoble\BlogBundle\Entity\Blog\Posts;
use DomNoble\UserBundle\Entity\Users;

class CommentFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{

    private $container;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    public function load(ObjectManager $manager)
    {
        $em = $this->container->get('doctrine')->getEntityManager('default')->getRepository('DomNobleUserBundle:Users');

        $comment = new Comments();
        $user = $em->loadUserByUsername('superadmin');
        $comment->setUserID($user->getId());
        $comment->setContent('To make a long story short. You can\'t go wrong by choosing Symfony! And no one has ever been fired for using Symfony.');
        $comment->setPost($manager->merge($this->getReference('post-1')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('bradpit');
        $comment->setUserID($user->getId());
        $comment->setContent('To make a long story short. Choosing a framework must not be taken lightly; it is a long-term commitment. Make sure that you make the right selection!');
        $comment->setPost($manager->merge($this->getReference('post-1')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('thejoker');
        $comment->setUserID($user->getId());
        $comment->setContent('Anything else, mom? You want me to mow the lawn? Oops! I forgot, New York, No grass.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('trollhat');
        $comment->setUserID($user->getId());
        $comment->setContent('Are you challenging me? ');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:15:20"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('thejoker');
        $comment->setUserID($user->getId());
        $comment->setContent('Name your stakes.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:18:35"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('trollhat');
        $comment->setUserID($user->getId());
        $comment->setContent('If I win, you become my slave.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:22:53"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('thejoker');
        $comment->setUserID($user->getId());
        $comment->setContent('Your SLAVE?');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 06:25:15"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('trollhat');
        $comment->setUserID($user->getId());
        $comment->setContent('You wish! You\'ll do shitwork, scan, crack copyrights...');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 06:46:08"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('thejoker');
        $comment->setUserID($user->getId());
        $comment->setContent('And if I win?');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 10:22:46"));
        $manager->persist($comment);

        $comment = new Comments();
        $em = $this->container()->get('doctrine')->getEntityManager();
        $user = $em->loadUserByUsername('trollhat');

        $comment->setUserID($user->getId());
        $comment->setContent('Make it my first-born!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 11:08:08"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('thejoker');
        $comment->setUserID($user->getId());
        $comment->setContent('Make it our first-date!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-24 18:56:01"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('trollhat');
        $comment->setUserID($user->getId());
        $comment->setContent('I don\'t DO dates. But I don\'t lose either, so you\'re on!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-25 22:28:42"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('doggg');
        $comment->setUserID($user->getId());
        $comment->setContent('It\'s not gonna end like this.');
        $comment->setPost($manager->merge($this->getReference('post-3')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('voltman');
        $comment->setUserID($user->getId());
        $comment->setContent('Oh, come on, Stan. Not everything ends the way you think it should. Besides, audiences love happy endings.');
        $comment->setPost($manager->merge($this->getReference('post-3')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('oldboy');
        $comment->setUserID($user->getId());
        $comment->setContent('Doesn\'t Bill Gates have something like that?');
        $comment->setPost($manager->merge($this->getReference('post-5')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $em->loadUserByUsername('mylittlepony');
        $comment->setUserID($user->getId());
        $comment->setContent('Bill Who?');
        $comment->setPost($manager->merge($this->getReference('post-5')));
        $manager->persist($comment);

        $manager->flush();
    }

    public function getOrder()
    {
        return 2;
    }
}

当我试图运行fixtures命令时,会得到一个错误:

命令

doctrine:fixtures:load

错误

Attempted to call method "container" on class "DomNoble\BlogBundle\DataFixt ures\ORM\CommentFixtures".

我在这里做错什么了?我所要做的就是使用用户存储库从用户名中交换用户id。我怎样才能做到这一点?

评论实体

代码语言:javascript
复制
namespace DomNoble\BlogBundle\Entity\Blog;

use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="DomNoble\BlogBundle\Entity\Repository\CommentsRepository")
 * @ORM\Table(name="comments")
 * @ORM\HasLifecycleCallbacks
 */
class Comments
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="DomNoble\UserBundle\Entity\Users")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $userID;

    /**
     * @ORM\Column(type="boolean")
     */
    private $approved;

    /**
     * @ORM\ManyToOne(targetEntity="Posts", inversedBy="comments")
     * @ORM\JoinColumn(name="post", referencedColumnName="id")
     */
    private $post;

    /**
     * @var string
     *
     * @ORM\Column(name="content", type="text")
     */
    private $content;

    /**
     * @var array
     *
     * @ORM\Column(name="img", type="array")
     */
    private $img;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created", type="datetime")
     */
    private $created;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated", type="datetime")
     */
    private $updated;

    public function __construct()
    {
        $this->setCreated(new \DateTime());
        $this->setUpdated(new \DateTime());

        $this->setApproved(true);
    }

    /**
     * @ORM\PreUpdate
     */
    public function setUpdatedValue()
    {
       $this->setUpdated(new \DateTime());
    }


    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('content', new NotBlank(array(
            'message' => 'You must enter a comment'
        )));
    }   


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set userID
     *
     * @param string $userID
     * @return Comments
     */
    public function setUserID($userID)
    {
        $this->userID = $userID;

        return $this;
    }

    /**
     * Get userID
     *
     * @return string 
     */
    public function getUserID()
    {
        return $this->userID;
    }

    /**
     * Set post
     *
     * @param string $post
     * @return Comments
     */
    public function setPost($post)
    {
        $this->post = $post;

        return $this;
    }

    /**
     * Get post
     *
     * @return string 
     */
    public function getPost()
    {
        return $this->post;
    }

    /**
     * Set approved
     *
     * @param integer $approved
     * @return Comments
     */
    public function setApproved($approved)
    {
        $this->approved = $approved;

        return $this;
    }

    /**
     * Get approved
     *
     * @return integer 
     */
    public function getApproved()
    {
        return $this->approved;
    }

    /**
     * Set content
     *
     * @param string $content
     * @return Comments
     */
    public function setContent($content)
    {
        $this->content = $content;

        return $this;
    }

    /**
     * Get content
     *
     * @return string 
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * Set img
     *
     * @param array $img
     * @return Comments
     */
    public function setImg($img)
    {
        $this->img = $img;

        return $this;
    }

    /**
     * Get img
     *
     * @return array 
     */
    public function getImg()
    {
        return $this->img;
    }

    /**
     * Set created
     *
     * @param \DateTime $created
     * @return Comments
     */
    public function setCreated($created)
    {
        $this->created = $created;

        return $this;
    }

    /**
     * Get created
     *
     * @return \DateTime 
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set updated
     *
     * @param \DateTime $updated
     * @return Comments
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return \DateTime 
     */
    public function getUpdated()
    {
        return $this->updated;
    }


}

更新:解决了!

上面的代码有几个问题,杰克提到了一个错误,getEntityManager变成了getManager,我试图向注释实体提供id,而不是用户对象。在这方面,它正在发挥作用:

评论装置

代码语言:javascript
复制
namespace DomNoble\BlogBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use DomNoble\BlogBundle\Entity\Blog\Comments;
use DomNoble\BlogBundle\Entity\Blog\Posts;
use DomNoble\UserBundle\Entity\Users;

class CommentFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{

    private $container;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    public function load(ObjectManager $manager)
    {
        $em = $this->container->get('doctrine')->getManager();
        $userRepo = $em->getRepository('DomNobleUserBundle:Users');

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('superadmin');
        $comment->setUser($user);
        $comment->setContent('To make a long story short. You can\'t go wrong by choosing Symfony! And no one has ever been fired for using Symfony.');
        $comment->setPost($manager->merge($this->getReference('post-1')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('bradpit');
        $comment->setUser($user);
        $comment->setContent('To make a long story short. Choosing a framework must not be taken lightly; it is a long-term commitment. Make sure that you make the right selection!');
        $comment->setPost($manager->merge($this->getReference('post-1')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('thejoker');
        $comment->setUser($user);
        $comment->setContent('Anything else, mom? You want me to mow the lawn? Oops! I forgot, New York, No grass.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('trollhat');
        $comment->setUser($user);
        $comment->setContent('Are you challenging me? ');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:15:20"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('thejoker');
        $comment->setUser($user);
        $comment->setContent('Name your stakes.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:18:35"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('trollhat');
        $comment->setUser($user);
        $comment->setContent('If I win, you become my slave.');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-23 06:22:53"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('thejoker');
        $comment->setUser($user);
        $comment->setContent('Your SLAVE?');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 06:25:15"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('trollhat');
        $comment->setUser($user);
        $comment->setContent('You wish! You\'ll do shitwork, scan, crack copyrights...');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 06:46:08"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('thejoker');
        $comment->setUser($user);
        $comment->setContent('And if I win?');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 10:22:46"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('trollhat');
        $comment->setUser($user);
        $comment->setContent('Make it my first-born!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-23 11:08:08"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('thejoker');
        $comment->setUser($user);
        $comment->setContent('Make it our first-date!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2014-07-24 18:56:01"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('trollhat');
        $comment->setUser($user);
        $comment->setContent('I don\'t DO dates. But I don\'t lose either, so you\'re on!');
        $comment->setPost($manager->merge($this->getReference('post-2')));
        $comment->setCreated(new \DateTime("2011-07-25 22:28:42"));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('doggg');
        $comment->setUser($user);
        $comment->setContent('It\'s not gonna end like this.');
        $comment->setPost($manager->merge($this->getReference('post-3')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('voltman');
        $comment->setUser($user);
        $comment->setContent('Oh, come on, Stan. Not everything ends the way you think it should. Besides, audiences love happy endings.');
        $comment->setPost($manager->merge($this->getReference('post-3')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('oldboy');
        $comment->setUser($user);
        $comment->setContent('Doesn\'t Bill Gates have something like that?');
        $comment->setPost($manager->merge($this->getReference('post-5')));
        $manager->persist($comment);

        $comment = new Comments();
        $user = $userRepo->loadUserByUsername('mylittlepony');
        $comment->setUser($user);
        $comment->setContent('Bill Who?');
        $comment->setPost($manager->merge($this->getReference('post-5')));
        $manager->persist($comment);

        $manager->flush();
    }

    public function getOrder()
    {
        return 2;
    }
}

评论实体

代码语言:javascript
复制
namespace DomNoble\BlogBundle\Entity\Blog;

use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="DomNoble\BlogBundle\Entity\Repository\CommentsRepository")
 * @ORM\Table(name="comments")
 * @ORM\HasLifecycleCallbacks
 */
class Comments
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="DomNoble\UserBundle\Entity\Users")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     */
    private $user;

    /**
     * @ORM\Column(type="boolean")
     */
    private $approved;

    /**
     * @ORM\ManyToOne(targetEntity="Posts", inversedBy="comments")
     * @ORM\JoinColumn(name="post", referencedColumnName="id")
     */
    private $post;

    /**
     * @var string
     *
     * @ORM\Column(name="content", type="text")
     */
    private $content;

    /**
     * @var array
     *
     * @ORM\Column(name="img", type="array")
     */
    private $img;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created", type="datetime")
     */
    private $created;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated", type="datetime")
     */
    private $updated;

    public function __construct()
    {
        $this->setCreated(new \DateTime());
        $this->setUpdated(new \DateTime());

        $this->setApproved(true);
    }

    /**
     * @ORM\PreUpdate
     */
    public function setUpdatedValue()
    {
       $this->setUpdated(new \DateTime());
    }


    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('content', new NotBlank(array(
            'message' => 'You must enter a comment'
        )));
    }   


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set user
     *
     * @param string $userID
     * @return Comments
     */
    public function setUser($user)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return string 
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Set post
     *
     * @param string $post
     * @return Comments
     */
    public function setPost($post)
    {
        $this->post = $post;

        return $this;
    }

    /**
     * Get post
     *
     * @return string 
     */
    public function getPost()
    {
        return $this->post;
    }

    /**
     * Set approved
     *
     * @param integer $approved
     * @return Comments
     */
    public function setApproved($approved)
    {
        $this->approved = $approved;

        return $this;
    }

    /**
     * Get approved
     *
     * @return integer 
     */
    public function getApproved()
    {
        return $this->approved;
    }

    /**
     * Set content
     *
     * @param string $content
     * @return Comments
     */
    public function setContent($content)
    {
        $this->content = $content;

        return $this;
    }

    /**
     * Get content
     *
     * @return string 
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * Set img
     *
     * @param array $img
     * @return Comments
     */
    public function setImg($img)
    {
        $this->img = $img;

        return $this;
    }

    /**
     * Get img
     *
     * @return array 
     */
    public function getImg()
    {
        return $this->img;
    }

    /**
     * Set created
     *
     * @param \DateTime $created
     * @return Comments
     */
    public function setCreated($created)
    {
        $this->created = $created;

        return $this;
    }

    /**
     * Get created
     *
     * @return \DateTime 
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set updated
     *
     * @param \DateTime $updated
     * @return Comments
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return \DateTime 
     */
    public function getUpdated()
    {
        return $this->updated;
    }


}

解决此问题的另一个解决方案是使用OrderedFixtureInterface并将所有注释引用给用户。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 19:30:07

更换线路

代码语言:javascript
复制
    $em = $this->container()->get('doctrine')->getEntityManager();

使用

代码语言:javascript
复制
    $em = $this->container->get('doctrine')->getEntityManager();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28817784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档