爱丽丝在3.x。
中赠送了持久性层尝试从2.2到3.0.x迁移,…
我需要首先加载并持续一些固定装置(因此他们的id
被填充(,然后从另一串固定文件中引用这些实体ID。
如何实现?
我想我可能必须分别循环并加载多个固定文件集,但我不知道对象参考将如何在这种情况下存活。
我的设置当前不起作用,但会导致以下错误提示:
对物体" bar1"的属性给出的无效价值 (课程:Doctrine Model bar(。
我的 fixturesloader.php :
// …
use NelmioAliceLoaderNativeLoader as AliceLoader;
// …
$loader = new AliceLoader();
$entities = $loader
->loadFiles(
[
__DIR__.'/foo.yml',
/* ↓ Some more fixture files ↓ */,
# Here comes "bar" which references persisted foo entities id
# through its "fooDbId" property using expresion '@foo1->id'
__DIR__.'/bar.yml'
],
['locale' => 'en_EN']
)
->getObjects();
foreach ($entitites as $entity) {
$manager->persist($entity)
}
$manager->flush();
bar.yml :
DoctrineModelBar:
bar1:
fooDbId: '@foo1->id'
# ↓ More properties ↓
编辑
fooDbId
不是"真实"关系/外键字段,而是0
左填充FOO实体ID。(BAR :: SETFOODBID负责左垫操作(。例如:给定具有 id 87
属性值的Foo实例,相关的bar实例应具有其fooDbId
属性等于'00000087'。
谢谢。
我想我可能必须分别循环并加载多个固定文件集,但我不知道对象参考将如何在这种情况下存活
加载一组固定装置时,您可以注入参数&对象。因此,如果您加载2个文件,则可以坚持下去,然后加载其余的文件,将上一个加载的结果传递给它。
首先,不必为每个实体创建单独的'yml'文件。
其次,正如我所理解的那样,您正在尝试将自己的许多关系伪造成一个学说。如果是这样,您就不需要这种方法。学说始终帮助您考虑对象而不是数据库。这是爱丽丝(Alice(如何帮助您的一个例子。
想象一下酒吧实体与foo有很多关系。这是一个示例:
AppEntityFoo:
foo_{1..10}:
title: <text(20)>
isFeatured: <boolean(50)>
AppEntityBar:
bar_{1..10}:
username: <userName()>
foo: '@foo_1' # This will assign the first foo generated above#
foo: '@foo_*' # This will assign one the 10 generated foos above randomly!#
再次,学说将一如既往地为您添加外键。