gpt4 book ai didi

php - 如何在使用 Doctrine 固定装置时获取数据库中的实体?

转载 作者:可可西里 更新时间:2023-10-31 23:29:05 25 4
gpt4 key购买 nike

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

但是,当执行 php bin/console doctrine: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));

最佳答案

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

namespace 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;
}
}

然后在其他夹具文件中,您不会像从数据库中那样调用用户,您可以这样做:

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

$article = new Article();
$article->addAuthor($author);

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

请记住在这个 article 夹具中实现 OrderedFixtureInterface 并将 getOrder() 设置为比 更高的数字用户

关于php - 如何在使用 Doctrine 固定装置时获取数据库中的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com