1 回答

TA貢獻1830條經驗 獲得超9個贊
首先,您根本不需要 addReference/getReference,因為您使用一個固定文件。因此,在您的情況下,您只需保存對象并在設置器中使用它們,例如:
in loadUsers:
public function loadUsers(ObjectManager $manager)
{
foreach (self::USERS as $userData)
{
$user = new User();
///...
$manager->persist($user);
$this->users[$userData['username']] = $user;
}
$manager->flush();
}
and in loadTheme:
$theme->setUser($this->users[self::USERS[rand(0, count(self::USERS) - 1)]['username']]);
您不需要引用,因為您可以訪問對象,當夾具位于單獨的文件中時,引用非常有用,因為這樣您就無法訪問在不同夾具文件中創建的對象。此處描述: https: //symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects- Between-fixtures 。
但是假設您想使用引用,我將嘗試提供指導來修復您已有的代碼。您說通過引用加載用戶適用于主題:
$theme->setUser($this->getReference(self::USERS[rand(0, count(self::USERS) - 1)]['last_name']));
它有效,因為您在以下位置添加了引用loadUsers:
$this->addReference($userData['last_name'], $user);
因此,在loadUsers您獲得這些參考資料后:
User objects:
- Goodman
- ...
現在,每當您調用時,$this->getReference('Goodman');您都會獲得可以在設置器中使用的 User 對象,例如。設置用戶();
但您從未調用addReference來loadTheme保存對主題對象的引用。
添加addReference到loadTheme:
public function loadTheme(ObjectManager $manager)
{
foreach (self::THEMES as $themeDate){
$theme = new Theme();
$theme->setName($themeDate['name']);
// ...
$theme->setUser($this->getReference(
self::USERS[rand(0, count(self::USERS) - 1)]['last_name']));
$manager->persist($theme);
$this->addReference($theme->getName(), $theme);
}
$manager->flush();
}
因此,之后loadUsers這些loadThemes參考資料將可用:
User objects:
- Goodman
- ...
Theme objects:
- A theme
- A theme 2
- ...
最后在你的loadSousThemes:
$sousthemes->setUsername($this->getReference(
self::USERS[rand(0, count(self::USERS) - 1)]['last_name']));
$sousthemes->setTheme($this->getReference(
self::THEMES[rand(0, count(self::THEMES) - 1)]['name']));
請注意,我假設這$sousthemes->setUsername()實際上是用于設置 User 對象,而不僅僅是用戶名(為什么不稱為 setUser?)
- 1 回答
- 0 關注
- 134 瀏覽
添加回答
舉報