Lors de l'implémentation de la suppression en cascade avec Doctrine2
Lorsque vous utilisez Doctrine2 pour gérer les relations avec la base de données, vous pouvez rencontrer le besoin de supprimer automatiquement les lignes enfants lors de la suppression d'une ligne parent. Ceci est réalisé grâce à l'option « lors de la suppression en cascade ».
Dans votre exemple spécifique, après avoir défini vos entités Enfant et Père, vous rencontrez un problème où l'option « en cas de suppression en cascade » n'est pas créée. dans la base de données. Cela est probablement dû à l'utilisation de cascades au niveau ORM (spécifiées comme cascade={"remove"} dans l'association).
Cascades au niveau ORM
Niveau ORM les cascades gèrent le processus de suppression au sein de UnitOfWork, affectant la structure de l'objet mais pas la base de données elle-même. Lors de la suppression d'un objet à l'aide de cascades au niveau ORM, UnitOfWork parcourt les objets associés et les supprime également.
Cascades au niveau de la base de données
Contrairement au niveau ORM cascades, les cascades au niveau de la base de données nécessitent de spécifier onDelete="CASCADE" dans la colonne de jointure de l'association. Cette approche ajoute la contrainte « lors de la suppression en cascade » à la colonne de clé étrangère dans la base de données, garantissant que les lignes enfants sont automatiquement supprimées lorsque la ligne parent est supprimée.
Pour corriger le problème, modifiez votre entité enfant comme suit. :
<code class="php">namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="child") */ class Child { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") * * @var father */ private $father; }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!