【发布时间】:2011-12-31 15:02:40
【问题描述】:
我在包的 DataFixtures/ORM 文件夹中创建了一个固定器类。实际的类如下所示:
use Doctrine\Common\DataFixtures\FixtureInterface,
Company\ShoppingBundle\Entity\Category;
class CategoryFixtures implements FixtureInterface
{
public function load($em)
{
$category1 = new Category()->setName("category1");
$category2 = new Category()->setName("category2");
$em->persist($category1);
$em->persist($category2);
$em->flush();
}
}
我没有使用 AbstractFixture 基类,因为我不需要引用。我还尝试在运行教义:fixtures:load 控制台命令时指定固定装置路径。我正在关注官方文档here。
【问题讨论】:
-
您遇到的错误是什么导致您无法加载夹具?极端的猜测是因为你已经完成了
$category1 = new Category()->setName("category1");,所以除非函数setName返回Category(很可能$this让你的代码有意义)$category1将被分配给null,然后你尝试持久化 null 并刷新它。 -
您对 setter 返回的错误假设是正确的。此后,我更改了代码以在首先创建对象后调用 setter。但这并不能帮助我解决主要问题。我看到的错误类似于:[InvalidArgumentException] 找不到要加载的任何固定装置:后跟其查找的文件夹列表(该列表包括我的固定装置类所在的文件夹:-)
-
在您上面的代码粘贴中,您在夹具类上没有命名空间,这只是您的问题中的一个遗漏吗?如果没有尝试将其添加到
namespace Acme\WhateverBundle\DataFixtures\ORM; -
另外,确保捆绑包在您的
AppKernel.php中初始化 -
是的,我确实有一个命名空间,但在复制和粘贴该代码时错过了它。是的,捆绑包也在 AppKernel 中初始化。今天奇怪的事情:我更新到 Symfony 2.0.5,然后重试了我的负载,它成功了!也许我必须清除缓存(我以为我已经这样做了)。还切换到使用 AbstractFixture 类和 OrderedFixtureInterface。希望我知道是什么“修复”了它:-)
标签: symfony doctrine-orm loading fixtures