Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在使用数据库时获取数据库中的实体?_Php_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 如何在使用数据库时获取数据库中的实体?

Php 如何在使用数据库时获取数据库中的实体?,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我一直是LoadAdvert类的ContainerWareInterface,因此我可以调用并使用EntityManager检索数据库中的用户 但是,当执行php-bin/console-doctor:fixtures:load时,实体管理器只检索一个空数组,就好像数据库中没有用户一样 <?php // src/OC/PlatformBundle/DataFixtures/ORM/LoadCategory.php namespace OC\PlatformBundle\DataFixtu

我一直是LoadAdvert类的ContainerWareInterface,因此我可以调用并使用EntityManager检索数据库中的用户

但是,当执行php-bin/console-doctor:fixtures:load时,实体管理器只检索一个空数组,就好像数据库中没有用户一样

<?php
// src/OC/PlatformBundle/DataFixtures/ORM/LoadCategory.php

namespace OC\PlatformBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use OC\PlatformBundle\Entity\Advert;
use OC\UserBundle\Entity\User;

   class LoadAdvert implements FixtureInterface, ContainerAwareInterface
    {
      /**
       * @var ContainerInterface
       */
      private $container;

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

      // Dans l'argument de la méthode load, l'objet $manager est l'EntityManager
      public function load(ObjectManager $manager)
      {
        $em = $this->container->get('doctrine.orm.entity_manager');
        $author = $em->getRepository('OCUserBundle:User')->findAll();

        die(var_dump($author));

我就是这样做的。主要是为您创建的用户对象设置引用,然后在其他装置文件中调用它,并将它们指定给相关对象。夹具数据的执行顺序也很重要。在加载用户之前,不能加载相关对象

` 名称空间AcmeBundle\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;

class LoadUserData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
    /** @var  ContainerInterface */
    private $container;

    /**
     * Load data fixtures with the passed EntityManager
     *
     * @param ObjectManager $manager
     */
    public function load(ObjectManager $manager)
    {
        $userManager = $this->container->get('fos_user.user_manager');

        $user1 = $userManager->createUser();
        $user1->setUsername('username1');
        $user1->setPlainPassword('123');
        $user1->setEmail('example1@gmail.com');
        $user1->setEnabled(true);


        $user2 = $userManager->createUser();
        $user2->setUsername('username2');
        $user2->setPlainPassword('123');
        $user1->setEmail('example2@gmail.com');
        $user2->setEnabled(true);

        $manager->persist($user1);
        $manager->persist($user2);

        $this->setReference('user1', $user1);
        $this->setReference('user2', $user2);

        $manager->flush();
    }

    /**
     * Get the order of this fixture
     *
     * @return integer
     */
    public function getOrder()
    {
        return 1;
    }

    /**
     * Sets the Container. Need it to create new User from fos_user.user_manager service
     *
     * @param ContainerInterface|null $container A ContainerInterface instance or null
     */
    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }
}
` 然后在另一个fixture文件中,您不会像在数据库中那样调用用户,您可以这样做:

`
$author=$this->getReference('user1')

`

然后将此
$author
对象添加到相关对象


请记住在这篇
文章中实现
OrderedFixtureInterface
,并将
getOrder()
设置为高于
用户的数值

您尝试做什么?你知道什么是信条数据装置吗?我正在尝试获取所有用户,并在将它们插入db之前使用它们来水合我的广告。你的类应该扩展
使用Symfony\Bundle\FrameworkBundle\Controller\Controller?如果您添加一个用户装置或在此装置中创建用户,您将得到更好的服务-这将进一步将您的测试与您的开发和生产数据库分离。我正在考虑这一点,geoB。问题是我正在使用FOSUserBundle,不知道如何为它创建数据装置。Purrfect!非常感谢你,泽德勋爵!没问题,很高兴我能帮忙。
 $article = new Article();
 $article->addAuthor($author);