我的Symfony项目中有两个灯具,一个LoadSport.php和一个LoadCategory.php。
每个体育运动都有一个私人'类别'属性,这是一个类别的实例。 我正在尝试检索我已经在我的数据库中的类别并将它们加载到Sports夹具中(我选择了一些运动)。我按照另一个线程中的建议,在灯具(http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#using-the-container-in-the-fixtures)内跟随官方使用容器。
所以这是我的LoadSport.php的代码:
class LoadSport implements FixtureInterface, ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load(ObjectManager $manager)
{
$i = 0;
$em = $this->container->get('doctrine')->getManager();
$category = $em->getRepository("MyBundle:Category")->findOneById(1);
$names = array('SportA', 'SportB', 'SportC');
foreach($names as $name)
{
$sport = new Sport();
$sport->setName($name);
$sport->setCategory($category);
$manager->persist($sport);
}
$manager->flush();
}
public function getOrder()
{
return 2;
}
我试图调用一个单独的管理器来获取类别n1,当我执行php app / console doctrine:fixture:load时,我收到此错误消息:
[Symfony的\元器件\调试\异常\ ContextErrorException] 可捕获的致命错误:参数1传递给MyBundle \ Entity \ Sport :: setCategory() 必须是MyBundle \ Entity \ Category的实例,null给定,在... / MyBundle / DataFixtures / ORM / LoadSport.php中调用 xx和定义
如何在LoadSport.php夹具中检索id 1.或任何其他类别的类别并设置Sport实例的类别?我究竟做错了什么?为什么我得到一个空值,因为它应该是一个类别实体?
非常感谢提前。
答案 0 :(得分:4)
使用传递给load函数的ObjectManager。像这样:
$category = $manager->getRepository('MyBundle:Category')->findOneById(1);
<强>更新强>:
如下所述,虽然这种方法很简单,但在操纵灯具中的数据时会导致问题。 Symfony Docs详细说明了执行此操作的正确方法。