J'ai une classe parent appelée Notification
qui a CommentNotification
comme l'un de ses enfants (héritage de la table des classes).
/**
* 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;
}
En CommentNotification
J'ai inclus onDelete = "CASCADE"
de sorte que, lorsque le commentaire est supprimé, la notification qui y était attachée est également supprimée.
/**
* @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;
...
}
Sur demande, je montre aussi ContentItemComment. Il n'y a pas de relation bidirectionnelle avec 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;
...
}
Cependant, il supprime avec succès la ligne dans le fichier comment_notification
mais la ligne en notification
existe toujours, ce qui me laisse des enregistrements fantômes dans la table de notification que je dois supprimer manuellement à chaque fois.
Par exemple, cette requête renverra de nouveaux résultats tous les jours :
SELECT * FROM `notification` n WHERE n.id not in (select id from comment_notification) and n.type='comment'
Ai-je manqué une annotation dans Notification
?