【发布时间】:2018-04-04 10:38:43
【问题描述】:
Alice 在 3.x 中放弃了持久层。
在尝试从 2.2 迁移到 3.0.x 时,...
我需要先加载并保留一些固定装置(以便填充它们的 id),然后从另一组固定装置文件中引用这些实体 ID。
如何实现?
我想我可能需要分别循环和加载多个夹具文件集,但我不知道在这种情况下对象引用将如何存在。
我的设置目前不起作用但导致提示以下错误:
对象“bar1”的属性“fooDbId”的值无效 (类:Doctrine\Model\Bar)。
我的FixturesLoader.php:
// …
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();
bar.yml:
Doctrine\Model\Bar:
bar1:
fooDbId: '@foo1->id'
# ↓ More properties ↓
编辑
fooDbId 不是“真正的”关系/外键字段,而是 0 左侧填充的 Foo 实体 ID。 (Bar::setFooDbId 负责左填充操作)。例如:给定一个 id 属性值为 87 的 Foo 实例,关联的 Bar 实例的 fooDbId 属性应该等于 '00000087'。
谢谢。
【问题讨论】:
标签: symfony4 nelmio-alice alice-fixtures