2013-03-26 77 views
0

我嘗試使用Doctrine casecade功能tu automagicaly保存兩個實體之間的關係,它似乎並沒有工作。隨着Symfony 2.2和Doctrine 2.2。*我不能保存manytoMany關係與級聯:persist

我在這裏做了一個演示:https://github.com/asakurayoh/demo_bug_doctrine 所以我使用doctrine夾具來製作演示。 你需要創建de數據庫(app/console doctrine:database:create),遷移表格(app/console doctrine:migrations:migrate),然後加載fixtures(app/console doctrine:fixtures:load)。第三個燈具(src/Demo/MyBundle/DataFixtures/ORM/TagsNewsFixtures.php)將所有標籤實體添加到所有新聞中。如果你進入數據庫,你會發現沒有關係保存在news_tag表中......我想我的關係在我的映射(Resources/config/doctrine/News.orm.yml和Tag.orm。 yml),並設置cascade屬性。

有人可以找到這個代碼的問題?我搜索無處不在(計算器太)和我已經做了所有的事情大家都在說...它應該工作...

感謝救我一命(和我的實體關係,哈!)

AsakuraYoh

回答

0

我發現了這個問題。 「joinTable」屬性需要在News一側,而新聞使用「inversedBy」屬性,而不是MappedBy(這是標籤)。所以它工作。然後爲標籤添加新聞(做相反的事情),我們需要在標籤實體中指定將標籤添加到新聞中......我不明白爲什麼Doctrine默認不會這麼做......奇怪...

+0

能否請您提供一個測試用例的這種行爲,(如果得到證實,與映射驗證通過)郵寄到http://www.doctrine-project.org/jira/browse/DDC? – Ocramius 2013-03-29 12:22:41

0

問題出在夾具加載順序 - TagNewsFixtures是先加載的,因此當時沒有標籤和新聞在數據庫中。嘗試使用ordere強制加載訂單

namespace Acme\HelloBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\AbstractFixture; 
use Doctrine\Common\DataFixtures\OrderedFixtureInterface; 
use Doctrine\Common\Persistence\ObjectManager; 

class LoadData extends AbstractFixture implements OrderedFixtureInterface 
{ 
    public function load(ObjectManager $manager) 
    { 
     // ... 
    } 

    public function getOrder() 
    { 
     return 1; // the order in which fixtures will be loaded 
    } 
} 
+0

我僅僅指剛驗證這一點,我的燈具順序加載(對我來說):1. NewsFixture,2 TagFixtures,3 TagNewsFixtures ......我傾倒的新聞和標籤中的價值我TagNewsFixture是的......所以這是不是... ... – 2013-03-26 17:23:35

+0

如果我沒有記錯的話,他們按字母順序加載... – 2013-03-26 17:30:50

+0

我以前做的OrderedFixtureInterface添加到我的夾具和設置的順序,剛需安全,但在我的服務器上,訂單已經正確。 – 2013-03-26 17:36:29

相關問題