我拼命地尝试将Doctrine灯具加载到我的数据库中。 当我调用全局cli加载函数时,开头没什么好看的:
> purging database
> loading [1] namespace_of_my_first_fixture_file
> loading [2] namespace_of_my_second_fixture_file
...
但是当它试图重新使用先前加载的灯具中的对象(错误的索引)时,它在进程的中间失败:
[ErrorException]
Notice: Undefined index: my_object_index in /Users/Swop/project/vendor/doctrine/data-fixtures/lib/Doctrine/Common/DataFixtures/ReferenceRepository.php line 145
我查看数据库,并且在任何表中都没有插入任何内容。如果我尝试只加载第一个夹具(似乎根据上面的粘贴加载),我有一个错误:
[InvalidArgumentException]
Could not find any fixtures to load in:
- src/MyOrg/MyBundleBundle/DataFixtures/ORM/MyFirstFixtureFileData.php
顺便说一句,我只是在我的MacOS X(Mountain Lion)上使用自编译的PHP 5.4实例运行它。
灯具数据加载在我的Linux机箱上运行良好。
答案 0 :(得分:3)
我在文档中找不到一个好的例子,最后发现这个有效。只需使用文件夹位置,不要指定灯具文件。
doctrine:fixtures:load --fixtures=src/MyOrg/MyBundleBundle/DataFixtures/ORM --append
答案 1 :(得分:1)
看看DoctrineFixturesBundle documentation。
您的数据夹具类需要实现OrderedFixtureInterface
,以便按预先设定的顺序加载它们。
然后,您可以使用$this->addReference('ref-name', $variable)
设置引用,并使用$this->getReference('ref-name')
引用其他灯具中的引用。
我猜测为什么它似乎在你的linux盒子上运行是因为修复程序以不同的顺序加载。
答案 2 :(得分:1)
请碰到这个。我的工具在我的本地Windows环境中运行,但在我的linux生产环境中失败了。
我的问题是区分大小写(因为它经常出现在windows-linux中)。
我将数据夹具目录命名为
Datafixtures
脚本寻找
DataFixtures
在第二个目录名中找到大写字母F,我没有; - )
我希望这能节省时间。
答案 3 :(得分:1)
升级doctrine / doctrine-fixtures-bundle
时遇到了同样的问题这帮助了我:
自动加载目录中的灯具(例如 AppBundle \ DataFixtures \ ORM)已删除。相反,注册你的 fixture类作为服务,然后用doctrine.fixture.orm标记。
来源:https://github.com/doctrine/DoctrineFixturesBundle/blob/master/UPGRADE.md