php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1686字,纯文字阅读大概需要3分钟。
内容图文
![php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?](/upload/InfoBanner/zyjiaocheng/902/6ea8df63e76e4f2683cca6c88eec32fc.jpg)
我的页面上出现以下严重错误
The "WildkatProxy\DocumentsTagProxy" document with identifier "4e90eede17bc2ec68c000001" could not be found.
我假设这是因为文档标记代理已从其他操作中删除,因此引用不再有效.我现在想要删除对这个对象的陈旧引用,但是要静默. (因为这可能会在很多其他情况下发生)无论如何,当删除对象时,我是否可以对引用已删除对象的所有对象执行“反向级联”?
完成此任务的最佳做法是什么?
谢谢
安迪
解决方法:
我假设您有两个集合,ArticleTag和Article,其中的文章引用了文章标签.如果要在删除标记时从文章中删除标记引用,则可以实现事件侦听器.
创建一个类:
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);
}
}
}
并在services.yml或xml文件中注册此类:
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'];
}
更新ArticleTagRemovalListener以调用此方法并完成!
内容总结
以上是互联网集市为您收集整理的php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?全部内容,希望文章能够帮你解决php – 当在Doctrine MongoDB中删除该对象时,如何删除对象的任何引用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。