Alice夹具 - 持久并引用第一组实体/对象

时间:2018-04-04 10:38:44

标签: symfony4 nelmio-alice alice-fixtures

Alice已经放弃了3.x中的持久层。

在尝试从2.2迁移到3.0.x时,...
我需要先加载并保留一些灯具(这样它们的// … use Nelmio\Alice\Loader\NativeLoader 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(); 会被填充),然后从另一堆灯具文件中引用这些实体ID。
如何实现这一目标?

我想我可能需要分别循环和加载多个fixture文件集,但我不知道对象引用如何在这种情况下存在。

我的设置目前无效,但会导致以下错误提示:

  

为该属性提供的值无效" fooDbId"对象" bar1"     (类:Doctrine \ Model \ Bar)。

我的 FixturesLoader.php

Doctrine\Model\Bar:
    bar1:
        fooDbId: '@foo1->id'
        # ↓ More properties ↓

bar.yml

fooDbId

修改

0不是真实的&#34; relation / foreign-key字段,但是87左边填充的Foo实体id。 (Bar :: setFooDbId负责左边填充操作)。例如:给定一个 id 属性值为fooDbId的Foo实例,关联的Bar实例的{{1}}属性应该等于&#39; 00000087&#39;。< / p>

谢谢。

2 个答案:

答案 0 :(得分:0)

  

我想我可能需要分别循环和加载多个fixture文件集,但我不知道对象引用将如何在这种场景中存在

当加载一组灯具时,您可以注入参数&amp;对象。因此,如果您加载2个文件,则可以将其保留,然后加载剩余的文件,将之前加载的结果传递给它。

答案 1 :(得分:0)

首先,没有必要创建单独的&#39; yml&#39;每个实体的文件。

其次,正如我所知,你正试图在学说中伪造你的多对一关系。如果是这样,您就不需要这种方法。 Doctrine总是帮助您考虑对象而不是数据库。以下是爱丽丝将如何帮助的例子。

想象一下,Bar实体与Foo有很多对一的关系。这是一个例子:

App\Entity\Foo:
    foo_{1..10}:
        title: <text(20)>
        isFeatured: <boolean(50)>

App\Entity\Bar:
    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!#

同样,Doctrine将一如既往地为您添加外键。