脚本宝典收集整理的这篇文章主要介绍了php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
The "WildkatProxy\DocumentsTagPRoxy" document wITh identifier "4e90eede17bc2ec68c000001" Could not be found.@H_304_8@我假设这是因为文档标记代理已从其他操作中删除,因此引用不再有效.我现在想要删除对这个对象的陈旧引用,但是要静默. (因为这可能会在很多其他情况下发生)无论如何,当删除对象时,我是否可以对引用已删除对象的所有对象执行“反向级联”?
谢谢
安迪
创建一个类:
namespace Foo\BarBundle\EventListener; use Doctrine\ODM\MongoDB\Event\LifecycleEventargs; use Foo\BarBundle\Document\Article; class ArticleTagRemovalListener { public function preRemove(LifecycleEventArgs $args) { $document = $args->getDocument(); if ($document instanceof Article) { // Remove tag From all articles $args ->getDocumentManager() ->getRepository('FooBarBundle:Article') ->removeTag($document); } } }
foo_bar.listener.tag_removal: class: Foo\BarBundle\EventListener\ArticleTagRemovalListener tags: - { name: doctrine_mongodb.odm.event_listener,event: preRemove }
接下来在文章的自定义repository class中添加以下方法:
public function removeTag($tag) { return $this ->createQueryBuilder() ->update() ->field('tags')->pull($tag) ->multiple(true) ->getQuery() ->execute(); }
这将删除所有可用文章中的标记,然后再删除它.如果要将删除操作级联到所有文章文档. (因此,删除该标记时删除具有特定标记的所有文章,请使用以下存储库方法.)
public function purgeByTag($tag) { $result = $this ->createQueryBuilder() ->remove() ->field('tags')->equals($tag) ->getQuery() ->execute(); return $result['n']; }
以上是脚本宝典为你收集整理的php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?全部内容,希望文章能够帮你解决php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。