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
不是真实的" relation / foreign-key字段,但是87
左边填充的Foo实体id。 (Bar :: setFooDbId负责左边填充操作)。例如:给定一个 id 属性值为fooDbId
的Foo实例,关联的Bar实例的{{1}}属性应该等于&#39; 00000087&#39;。< / p>
谢谢。
答案 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将一如既往地为您添加外键。