【问题标题】:Removing object temporarily from object storage - TYPO3从对象存储中临时删除对象 - TYPO3
【发布时间】:2017-01-18 07:32:56
【问题描述】:

我有 2 个模型横幅和文件。横幅和文件通过 mm 关系连接。包含文件的横幅对象作为对象存储。当我从对象存储中删除文件时,文件被删除。我怎样才能只删除关系而不是删除对象?

$banner->getFiles();

返回一个对象存储。

 $files = $banner->getFiles();
   foreach($files as $file){
       $uid = $file->getUid();
       if($uid==4){
           $banner->removeFiles($file);
       }
   }

当我完成上述代码时,文件模型的字段删除更新为 1

【问题讨论】:

  • 你的问题很模糊。您实际上是在 File 对象上调用 delete() 方法吗?然后,只需对 Banner 对象使用 remove 方法。那应该删除关系并保留 File 对象。

标签: typo3 extbase


【解决方案1】:

你希望这个过程在什么样的行动中?仅当您使用操作重定向或手动使用 PersistenceManager 持久保存 $banner 对象时,才应真正删除该文件。

也许您也可以克隆 ObjectStorage,然后分离一些对象。

$files = clone $banner->getFiles();
   foreach($files as $file){
       $uid = $file->getUid();
       if($uid==4){
           $files->detach($file);
       }
   }

在此解决方案中,所有文件都应保留在 $banner 中,但 UID4 会在 $files 变量中删除。

更新:见下面的 cmets。 deleted=1 是由模型内部的@cascade remove 注解引起的。

【讨论】:

  • 如果 $banner 模型中的 $files 声明为 @cascade 删除?
  • 声明为@cascade remove
  • 我不确定它是否有帮助,但尝试删除注释,清除安装工具中的缓存并再次尝试删除 ObjectStorage 的一些项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多