La cascade ne marche pas sur doctrine : Je suis sous symfony 4.2.11 et j'ai besoin d'enregistrer une entité PageTemplate. Or cette entité contient des entités PageTemplateBlock qui doivent être mis à jour en base. L'entité PageTemplateBlock contient des entités PageTemplateBlockProfiled, PageTemplateBlockView et PageBlockItemVersion qui doivent aussi être mis à jour.

Au début tout marchait bien sauf que les entités PageBockItemVersion étaient supprimés par cascade..
 
Du coup, j'ai essayé de récupérer la liste de mes PageBlockItemVersion pour les persister (c'est sale)..

Et là je suis bloqué pour un contrainte d'intégrité SQL... Doctrine supprime mes entités correctement mais il insert un PageTemplateBlock avant le PageTemplate --' 

Bref aidez-moi s'il vous plait, je doit régler ce problème rapidement et je n'ai plus d'espoirs

Résultat:

[Requêtes exécutés][1]

[Message d'erreur][2]

PageTemplate

`` `php

    /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     * @ORM\Column(type="string")
     */
    private $name;

    /**
     * @var string|null
     * @ORM\Column(type="string", nullable=true)
     */
    private $description;

    /**
     * @var Site
     * @ORM\ManyToOne(targetEntity="Site", inversedBy="pageTemplates")
     */
    private $site;

    /**
     * @var PageTemplateBlock[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="PageTemplateBlock", mappedBy="template", cascade={"remove", "persist"}, orphanRemoval=true)
     * @ORM\OrderBy({"order"="ASC"})
     */
    private $blocks;

    /**
     * @var PageVersion[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="PageVersion", mappedBy="pageTemplate", cascade={"remove", "persist"}, orphanRemoval=true)
     */
    private $pageVersions;
` ``
PageTemplateBlock

`` `php

    /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var PageTemplate
     * @ORM\ManyToOne(targetEntity="PageTemplate", inversedBy="blocks")
     */
    private $template;

    /**
     * @var integer
     * @ORM\Column(type="integer", name="_order")
     */
    private $order;

    /**
     * @var string
     * @ORM\Column(type="string")
     */
    private $name;

    /**
     * @var string|null
     * @ORM\Column(type="string", nullable=true)
     */
    private $description;

    /**
     * @var PageTemplateBlockProfiled[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="PageTemplateBlockProfiled", mappedBy="block", cascade={"remove", "persist"}, orphanRemoval=true)
     */
    private $profiledData;

    /**
     * @var PageTemplateBlockView[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="PageTemplateBlockView", mappedBy="block", cascade={"remove", "persist"}, orphanRemoval=true)
     */
    private $views;

    /**
     * @var PageBlockItemVersion[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="PageBlockItemVersion", mappedBy="pageTemplateBlock", cascade={"remove", "persist"}, orphanRemoval=true, fetch="EAGER")
     */
    private $pageItems;
` ``

PageTemplateBlockProfiled

`` `php

 /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var PageTemplateBlock
     * @ORM\ManyToOne(targetEntity="PageTemplateBlock", inversedBy="profiledData")
     * @ORM\JoinColumn(name="block_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $block;

    /**
     * @var Profile
     * @ORM\ManyToOne(targetEntity="Profile", inversedBy="profiledItems")
     */
    private $profile;

    /**
     * @var string|null
     * @ORM\Column(type="string", nullable=true)
     */
    private $node;
` ``

PageTemplateBlockView

`` `php

    /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var PageTemplateBlock
     * @ORM\ManyToOne(targetEntity="PageTemplateBlock", inversedBy="views")
     * @ORM\JoinColumn(name="block_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $block;

    /**
     * @var View
     * @ORM\ManyToOne(targetEntity="View", inversedBy="pageTemplateBlock")
     */
    private $view;

    /**
     * @var integer
     * @ORM\Column(type="integer", name="_order")
     */
    private $order;

    /**
     * @var bool
     * @ORM\Column(type="boolean")
     */
    private $locked;

    /**
     * @var array|null
     * @ORM\Column(type="array", nullable=true)
     */
    private $data;
` ``

PageBlockItemVersion

`` `php

/**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var PageVersion
     * @ORM\ManyToOne(targetEntity="PageVersion", inversedBy="items")
     */
    private $pageVersion;

    /**
     * @var PageTemplateBlock
     * @ORM\ManyToOne(targetEntity="PageTemplateBlock", inversedBy="pageVersions")
     * @ORM\JoinColumn(name="page_template_block_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $pageTemplateBlock;

    /**
     * @var int
     * @ORM\Column(type="integer", name="_order")
     */
    private $order;

    /**
     * @var array
     * @ORM\Column(type="array")
     */
    private $data;

    /**
     * @var View
     * @ORM\ManyToOne(targetEntity="View", inversedBy="pageBlockItems")
     */
    private $view;
``


  [1]: https://i.stack.imgur.com/kXr4K.png
  [2]: https://i.stack.imgur.com/R2VO7.png