脚本宝典收集整理的这篇文章主要介绍了php – 禁用Doctrine外键约束,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
/** * @ORM\ManyToOne(targetEntITy="Page",casCADe="PErsist") * @ORM\JoinColumn(name="page_id",referencedColumnName="id") */ PRivate $parentPage;
Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
基本上我的模型是页面和页面修订.当我删除页面时,我不想删除修订.我还想在页面修订版上保留page_id(即不将其设置为null).
这种严格性反映了具有外键约束的概念;喜欢@Théo说:
软删除(已经提到)是一种解决方案,但您还可以做的是在PreRemove事件处理程序(生命周期回调)中删除之前添加另一个与page_id同步的removed_page_id列.这些信息是否有任何价值我想知道,但我猜你有一些用处,否则你不会问这个问题.
我绝对没有声称这是一个好习惯,但它至少是你可以用于边缘情况的东西.所以有以下几点:
在您的修订版中:
/** * @ORM\ManyToOne(targetEntity="Page",cascade="persist") * @ORM\JoinColumn(name="page_id",referencedColumnName="id",onDelete="SET NULL") */ private $parentPage; /** * @VAR int * @ORM\Column(type="integer",name="removed_page_id",nullable=true) */ protected $removedPageId;
然后在你的页面中:
/** * @ORM\PreRemove */ public function preRemovePageHandler(LifecycleEventArgs $args) { $entityManager = $args->getEntityManager(); $page = $args->getEntity(); $revisions = $page->getRevisions(); foreach($revisions as $revision){ $revision->setRemovedPageId($page->getId()); $entityManager->persist($revision); } $entityManager->flush(); }
以上是脚本宝典为你收集整理的php – 禁用Doctrine外键约束全部内容,希望文章能够帮你解决php – 禁用Doctrine外键约束所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。