2015-04-01 36 views
0

我「M具有其上我可以創建新的‘書’的形式。 對於一本書,我可以添加標籤(例如用於描述關於它的附加信息)。Symfony的教義多對多插入

簿和標籤之間的關係是多對多,因爲每一本書可以有很多的標籤,並且每個標籤可以依賴於不同的書籍。 (每個標籤是其名稱上唯一的字段)。所以,當用戶輸入一個新的標籤到數據庫中不存在的圖書時,我想在提交時創建標籤。如果它已經存在,我想將標籤添加到書中。我已經試過如下:

$book = $this->form->getData(); 

foreach ($tags as $tag) { 
    $tag = strtolower($tag); 

    // check if tag already exists 
    $tagEntity = $this->em->getRepository('BookBundle:Tag')->findByName($tag); 

    // if not, create new tag and add 
    if(null === $tagEntity) 
    { 
     $tagEntity = new Tag(); 
     $tagEntity->setName($tag); 
    } 

    // add tag to book 
    $book->addTag($tagEntity); 
    // add book to tag 
    $tagEntity->addbook($book); 

    // create relation between tag and book 
    $this->em->persist($book); 
    $this->em->persist($tagEntity); 

    $this->em->flush(); 
} 

問題:

1)我首先需要創建與堅持和沖洗1號線後的書,之前,我可以去嗎?

2)有什麼處理增加(新)標籤的書籍,就像我上面描述的最佳方式?

在當我點擊「提交」,我的本地阿帕奇不響應和「掛斷」的那一刻..

問候

+0

到哪裏都是在$標籤從此來了嗎?不在代碼中。你有沒有檢查數組是否存在並且不是空的? – 2015-04-01 17:14:55

+0

它不是空的,我發現這裏的解決方案,關鍵詞「反方」和「的addItem」:http://stackoverflow.com/questions/7044864/symfony2-doctrine-manytomany-relation-is-not-saved-to-數據庫 – 2015-04-01 20:26:08

+0

當標籤已經存在時,Theres錯誤。你必須使用'''findOneByName'''否則它將返回數組。 – Keo 2015-04-02 08:49:11

回答

1

儘量不要同時添加的書標記和標籤預訂。只需添加標籤預訂並堅持書本實體。學說應該做到這一切。當然,這本書或標籤實體應該使用該方法自動添加由教義生成的書或標籤。

+0

是的,多數民衆贊成什麼,我也發現在鏈接發表評論的其他答案。接受你的,因爲它正是什麼需要待定。只要確保你在你的領域添加了「cascade = {」persist「}」,那麼教義就會自動完成。 – 2015-04-02 09:05:10