爱丽丝固定装置 - 坚持并引用第一组实体/对象



爱丽丝在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!#

再次,学说将一如既往地为您添加外键。

最新更新