[英]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.