我目前正在寻找一个网站的灯具,这些网站之间有很多关系。
假设有一个与球队表相关的联赛表,该表与成员表有关。我简要地检查了Alice库来处理数据“随机化”和其他东西。
但是我有一个问题,是否有一个库(或方式),这将允许我创建“依赖”灯具?
例如,我会为联盟设置模板以自动创建20个团队,其中每个团队将根据某些已定义的结构自动创建10个成员。
每当我调用create league fixture时,它都会创建所有依赖项。
答案 0 :(得分:1)
如official documentation中所述,您可以在灯具中使用对象引用
$userAdmin = new User();
$userAdmin->setUsername('admin');
$userAdmin->setPassword('test');
$manager->persist($userAdmin);
$manager->flush();
$this->addReference('admin-user', $userAdmin);
// in another fixture
$userGroupAdmin = new UserGroup();
$userGroupAdmin->setUser($this->getReference('admin-user'));
答案 1 :(得分:1)
像上面写的Flask一样,使用Doctrine DataFixtures。
节省时间并避免使用Alice Bundle / library。我在一个项目开始使用它,但不得不很快删除它。您根本无法控制生成的数据。
但是,请使用faker库。
我会给你的另一个建议是,在你的每个Fixtures类中实现类似于> initSeed()的方法,你可以在 - > load()方法的开头调用它。它会调用这样的东西:
$this->faker->seed(100);
还要使你的灯具实现OrderedFixtureInterface,这样你就可以先控制插入的内容。这里有一个问题......你在load()中实现了initSeed(),而不是在构造函数中,因为构造函数在所有类的开头都被调用,因为需要getOrder()方法来找出优先级。这样,如果在fixture文件的末尾添加另一个随机属性,接下来的文件仍会生成相同的数据,因此fixture文件不会相互依赖。
如果您需要任何代码示例,请告诉我,我可以提供帮助。
保存参考的代码:
在LoadTeamData fixture类中,有一个常量:
const NUM = 10;
因此,您可以在其他灯具文件中访问它。
在for循环中生成团队时,请使用索引$ i来保存引用。
// Generate teams
for ($i=0; $i<self::NUM; $i++) {
$team = new Team();
// ... set things
$this->setReference('team-'.$i, $team)
$manager->persist($team);
}
$manager->flush();
然后在LoadPlayerData内部例如:
// For each team, generate some players
for ($t=0; $t<LoadTeamData::NUM; $t++) {
$team = $this->getReference('team-'.$t);
for ($i=0; $i<self::NUM; $i++) {
$player = new Player($team);
// ... set things
$manager->persist($player);
}
}
$manager->flush();