簡體   English   中英

保存相關實體學說/ Symfony2

[英]Saving Related Entities Doctrine/Symfony2

我有一個具體問題。 我有兩個實體:

    class MyPlaylist {
   ...
    /**
     * @var Array 
     * @ORM\OneToMany(targetEntity="MyPlaylistContent", mappedBy="myPlaylist", orphanRemoval=true)
     * @ORM\OrderBy({"position" = "DESC"})
     */
    private $myPlaylistItems;

class MyPlaylistContent {
....

    /**
     * @ORM\ManyToOne(targetEntity="MyPlaylist", inversedBy="myPlaylistItems")
     */
    private $myPlaylist;

現在我有這個服務

....    
    $myPlaylist = new MyPlaylist();
    $myPlaylist->setUser($user);
    $myPlaylist->setActive(true);

    // add tracks
    foreach ($playlist->getMyPlaylistItems() as $item) {
      $entity = new MyPlaylistContent();
      $entity->setTrack($item->getTrack());
      $entity->setMyPlaylist($myPlaylist);
      $this->em->persist($entity);
    }

    $this->em->persist($myPlaylist);
    $this->em->flush();

    \Doctrine\Common\Util\Debug::dump($myPlaylist);

    return $myPlaylist;

因此,我返回了一個新的播放列表。 如果我查看數據庫,一切正常。 我既有實體,又有MyPlaylistContent-3個音軌。

\\ Doctrine \\ Common \\ Util \\ Debug :: dump($ myPlaylist); 顯示下一個

[“ active”] => bool(true)[“ myPlaylistItems”] => array(0){}

該應用程序在頁面上顯示空的播放列表(無曲目)。 如果刷新頁面,則可以看到所有曲目。

關鍵是,如果您打開頁面,則控制器將調用服務,構建內容並返回列表作為響應。 它看起來像一個例子,但對我不起作用http://symfony.com/doc/current/book/doctrine.html#saving-related-entities

怎么了 為什么我沒有當前實體的跟蹤?

您忘記將MyPlaylistContent添加到MyPlaylist

使用此代碼段進入foreach

$myPlaylist->addMyPlaylistContent($myPlaylistContent);

當然要相應地更改名稱或實現方法

首先要注意:這是因為對象是“正常”的php對象,它們與教義無關,因此,關系只是一個教義概念。 理論上的EntityManager將處理此類過程,而不是PHP本身。 如果您查看類方法,您可能會注意到在這些對象之間沒有進行“連接”(分配)。 如果願意,您可以修改MyPlaylistContent,以便在分配后將其自身添加到MyPlaylist中。 就像是

類MyPlaylistContent {[...]

public function setMyPlaylist(MyPlaylist $mp) 
{
    $this->myPlaylist = $myPlaylist;
    $mp->addMyPlaylistContent($this);

    return $this;
}

第二點:希望您的名字與這些名字更一致:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM