第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

加載 Doctrine 固定裝置時(shí),設(shè)置引用(外鍵)存在問(wèn)題,違反了 -not-null 約束

加載 Doctrine 固定裝置時(shí),設(shè)置引用(外鍵)存在問(wèn)題,違反了 -not-null 約束

PHP
慕尼黑8549860 2023-10-21 15:44:42
我正在使用 Doctrine Fixtures 將一些數(shù)據(jù)加載到我的數(shù)據(jù)庫(kù)中,有 3 個(gè)不同的表 User、Theme 和 Sous_Theme,最后兩個(gè)表有外鍵,Theme 為 (user.id),Sous_Theme 作為兩個(gè)外鍵 (user.id)。 id 和主題.id)我的AppFixtures.php課程的設(shè)置方式是每個(gè)模型值都已經(jīng)以這種方式編寫(xiě): private const USERS = [      [          'last_name' => 'Goodman',          'first_name'=> 'Robert',          'email' => 'robert@foobar.com',          'job' => 'Admin_Tester',          'password' => 'blablablablablbal',          'username' => 'blablablabla',          'roles' => [USER::ROLE_ADMIN]      ]...]private const THEMES =    [        ['name' => 'A theme'],        ['name' => ' A theme 2']  .....]private const SOUSTHEMES = [    [        'name' => 'blablabla',        'part1' => true, //boolean        ...    ],在編寫(xiě) SOUSTHEMES 部分之前,我已經(jīng)加載了用戶和主題值及其完美運(yùn)行的參考:public function loadTheme(ObjectManager $manager)    {        foreach (self::THEMES as $themeDate){            $theme = new Theme();            $theme->setName($themeDate['name']);            $date = new \DateTime();            $date->modify('-'. rand(0, 10) . 'day');            $theme->setCreatedAt($date);            //// Setting user Id into our Theme table.            $theme->setUser($this->getReference(                self::USERS[rand(0, count(self::USERS) - 1)]['last_name']));            $manager->persist($theme);        }        $manager->flush();    }現(xiàn)在我嘗試使用引用 theme.id 和 user.id 加載 sousthemes :public function loadSousThemes(ObjectManager $manager){        foreach (self::SOUSTHEMES as $sousthemeData){            $sousthemes = new SousTheme();            $sousthemes->setName($sousthemeData['name']);            $date = new \DateTime();            $date->modify('-'. rand(0, 10) . 'day');            $sousthemes->setCreatedAt($date);我已經(jīng)開(kāi)始使用該getReference()方法,但我得到的引用不存在,所以我切換到了addReference()另一個(gè)錯(cuò)誤,說(shuō)引用已經(jīng)存在,我需要使用它setReference()來(lái)覆蓋它,所以我將我的方法更改為setReference()現(xiàn)在我收到一個(gè)錯(cuò)誤SQLSTATE[23502]: Not null violation: 7 ERROR:  null value in column "theme_id" violates not-null constraint 
查看完整描述

1 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

首先,您根本不需要 addReference/getReference,因?yàn)槟褂靡粋€(gè)固定文件。因此,在您的情況下,您只需保存對(duì)象并在設(shè)置器中使用它們,例如:


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']]);

您不需要引用,因?yàn)槟梢栽L問(wèn)對(duì)象,當(dāng)夾具位于單獨(dú)的文件中時(shí),引用非常有用,因?yàn)檫@樣您就無(wú)法訪問(wèn)在不同夾具文件中創(chuàng)建的對(duì)象。此處描述: https: //symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects- Between-fixtures 。


但是假設(shè)您想使用引用,我將嘗試提供指導(dǎo)來(lái)修復(fù)您已有的代碼。您說(shuō)通過(guò)引用加載用戶適用于主題:


$theme->setUser($this->getReference(self::USERS[rand(0, count(self::USERS) - 1)]['last_name']));

它有效,因?yàn)槟谝韵挛恢锰砑恿艘胠oadUsers:


$this->addReference($userData['last_name'], $user);

因此,在loadUsers您獲得這些參考資料后:


User objects:

 - Goodman

 - ...

現(xiàn)在,每當(dāng)您調(diào)用時(shí),$this->getReference('Goodman');您都會(huì)獲得可以在設(shè)置器中使用的 User 對(duì)象,例如。設(shè)置用戶();


但您從未調(diào)用addReference來(lái)loadTheme保存對(duì)主題對(duì)象的引用。


添加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']));


請(qǐng)注意,我假設(shè)這$sousthemes->setUsername()實(shí)際上是用于設(shè)置 User 對(duì)象,而不僅僅是用戶名(為什么不稱(chēng)為 setUser?)


查看完整回答
反對(duì) 回復(fù) 2023-10-21
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)