У меня есть родительский класс с именем 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
все еще существует, оставляя меня с призрачными записями в таблице уведомлений, которые Мне приходится каждый раз вручную удалять.
Например, этот запрос будет каждый день возвращать новые результаты:
SELECT * FROM `notification` n WHERE n.id not in (select id from comment_notification) and n.type='comment'
Я пропустил аннотацию в Notification
?