【发布时间】:2015-07-18 17:12:16
【问题描述】:
我的 Symfony 项目中有两个固定装置,一个 LoadSport.php 和一个 LoadCategory.php。
每个运动实例都有一个私有的“类别”属性,它是类别的一个实例。 我正在尝试检索我已经在我的数据库中的类别并将它们加载到运动装置中(我选择了一些运动)。按照另一个线程中的建议,我按照官方在夹具中使用容器 (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 学说:fixture:load 时,我收到以下错误消息:
[Symfony\Component\Debug\Exception\ContextErrorException] 可捕获的致命错误:参数 1 传递给 MyBundle\Entity\Sport::setCategory() 必须是 MyBundle\Entity\Category 的实例,给定 null,在线调用 .../MyBundle/DataFixtures/ORM/LoadSport.php xx 和定义
如何检索 id 1. 的类别或 LoadSport.php 夹具中的任何其他类别并设置 Sport 实例的类别?我究竟做错了什么?为什么我得到一个空值,而它应该是一个类别实体?
非常感谢。
【问题讨论】:
-
如何在数据库中插入类别?学说也是固定的吗?
-
是的,我将它作为固定装置插入。为了首先加载类别,在我的 LoadCategory.php 中,我放了 > public function getOrder() { return 1;在我的 LoadSport.php 中,我把 > public function getOrder() { return 2; }
-
@Nadjib - 除非您执行我在下面写的操作,否则您不会停止收到该错误。这很简单。
标签: symfony doctrine-orm