gpt4 book ai didi

symfony - 类表继承中的级联删除不会删除父行

转载 作者:行者123 更新时间:2023-12-05 03:54:22 25 4
gpt4 key购买 nike

我有一个名为 Notification 的父类,它的子类之一是 CommentNotification(类表继承)。

/**
* This entity represents the notifications that are sent to users when an event happens
* @ORM\Entity(repositoryClass="AppBundle\Repository\NotificationRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
* "yp" = "YpNotification",
* "default" = "Notification",
* "comment" = "CommentNotification",
* "post" = "PostNotification"})
* @ORM\Table(name="notification")
*/
class Notification
{
/**
* The identifier of this notification
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @var int $id
*/
protected $id;
}

CommentNotification 中,我包含了 onDelete = "CASCADE",这样当评论被删除时,附加到它的通知也会被删除。

/**
* @ORM\Entity
* @ORM\Table(name="comment_notification")
* @ORM\Entity(repositoryClass="AppBundle\Entity\Notifications\CommentNotificationRepository")
*/
class CommentNotification extends Notification
{

/**
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\ContentItem\ContentItemComment")
* @ORM\JoinColumn(name="comment_id", referencedColumnName="id", onDelete="CASCADE", nullable=false)
*/
private $comment;
...
}

根据要求,我也显示了 ContentItemComment。这不包含与 CommentNotification 的双向关系。

/**
*
* @ORM\Table(name="content_item_comment")
* @ORM\Entity(repositoryClass="AppBundle\Entity\ContentItem\ContentItemCommentRepository")
*/
class ContentItemComment
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
}

但是它成功删除了 comment_notification 中的行,但是 notification 中的行仍然存在,给我留下了通知表中的鬼记录,我必须手动删除每个时间。

F.e 这个查询每天都会返回一些新的结果:

SELECT * FROM `notification` n WHERE n.id not in (select id from comment_notification) and n.type='comment' 

我是否遗漏了 Notification 中的注释?

最佳答案

关于Doctrine site是以下注释:

When you do not use the SchemaTool to generate the required SQL you should know that deleting a class table inheritance makes use of the foreign key property ON DELETE CASCADE in all database implementations. A failure to implement this yourself will lead to dead rows in the database.

可能是这个原因吗?

关于symfony - 类表继承中的级联删除不会删除父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com