首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctrine2:更新时多对一删除关系

Doctrine2:更新时多对一删除关系
EN

Stack Overflow用户
提问于 2014-11-07 23:51:56
回答 2查看 1.3K关注 0票数 0

我有一个软件,可以拥有许多截图。

这是软件类:

代码语言:javascript
复制
class Software
{
   public function __construct()
   {
       $this->screenshots = new ArrayCollection();
   }

   /**
    * @ORM\OneToMany(targetEntity="Screenshot", mappedBy="software", cascade={"persist"})
    * @ORM\OrderBy({"sequence" = "ASC", "id" = "ASC"})
    */
   private $screenshots;


   public function setScreenshots($screenshots)
   {
       $this->screenshots = $screenshots;
   }
}

这是截图类:

代码语言:javascript
复制
class Screenshot
{
   /**
    * @ORM\ManyToOne(targetEntity="Software", inversedBy="screenshots")
    * @ORM\JoinColumn(name="software_id", referencedColumnName="id")
    */
   private $software;

   /**
    * @param mixed $software
    */
   public function setSoftware($software)
   {
       $this->software = $software;
   }

当我生成一些新的屏幕截图时,将它们放入数组集合中,并使用新的屏幕截图调用$software->setScreenshots($newScreenshots),一切都很正常。新的屏幕截图将被保存,并且它们具有对软件的引用。

但当我生成一些其他屏幕截图并再次调用该方法时,它不会删除旧的屏幕截图。新的屏幕截图是刚刚添加的。

有没有办法有某种级联选项,这样就可以删除旧的屏幕截图?或者至少删除对软件的引用?

EN

回答 2

Stack Overflow用户

发布于 2014-11-11 02:44:24

你可以让de数据库来完成这项工作(DBAL端):

代码语言:javascript
复制
user:
        targetEntity: User
        inversedBy: points
        joinColumn:
            name: user_id
            referencedColumnName: id
            onDelete: 'cascade' #this is important for u
        fetch: EAGER
票数 1
EN

Stack Overflow用户

发布于 2014-11-08 00:48:34

最简单的解决方案是手动删除它们:

代码语言:javascript
复制
foreach ( $software->getScreenshots() as $scrshot){
    $em->remove($scrshot);
}
$software->setScreenshots($newScreenshots);

但是,除了这个解决方案之外,你有没有尝试过在逆边或关系上定义orphanRemoval?也许这会有帮助,但我不确定:

代码语言:javascript
复制
/**
 * @ORM\OneToMany(targetEntity="Screenshot", mappedBy="software", cascade={"persist"}, orphanRemoval=true)
 * @ORM\OrderBy({"sequence" = "ASC", "id" = "ASC"})
 */
private $screenshots;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26805014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档