【问题标题】:Saving Related Entities Doctrine/Symfony2保存相关实体学说/Symfony2
【发布时间】:2015-08-12 10:20:12
【问题描述】:

我有一个具体问题。我有两个实体:

    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

这里有什么问题?为什么我没有获取当前实体的轨迹?

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    您忘记将MyPlaylistContent 添加到MyPlaylist

    在foreach中使用这个sn-p

    $myPlaylist->addMyPlaylistContent($myPlaylistContent);
    

    当然要相应地更改名称或实现方法

    首先注意:这是因为对象是“正常”的php对象,它们与教义无关,所以关系只是一个教义概念。学说中的 EntityManager 将处理这种过程,而不是 php 本身。如果您查看您的类方法,您可能会注意到这些对象之间没有“连接”(分配)。如果您愿意,您可以修改 MyPlaylistContent 以在分配后将其自身添加到 MyPlaylist。 类似的东西

    类 MyPlaylistContent { [...]

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

    第二点:希望你的名字与这些名字更一致:)

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多