Symfony 4 - Некоторые сложности с Cascade = {'persist', 'remove'} - PullRequest
0 голосов
/ 01 ноября 2019

и извините за мой английский, я француз, поэтому я использую переводчик. Вот часть моей модели, чтобы проиллюстрировать мои слова:

enter image description here

Так вот в чем проблема. Я на своей странице настроек администратора. На этой странице я смогу добавлять / удалять типы праздников. Но когда я удаляю типы праздников, он должен был бы удалять вещи, каскадные в базе данных.

На самом деле принцип сайта следующий:

Пользователи спрашивают о своих выходных. Для этого они дают вид отпуска, для которого они будут отсутствовать. И для каждого типа праздников у пользователей есть баланс.

Итак, у меня есть это:

ParametresAdmin.php:

/**
     * @ORM\OneToMany(targetEntity="App\Entity\TypeConge", mappedBy="parametresAdmin", orphanRemoval=true, cascade={"persist", "remove"})
     */
    private $typesConges;

TypeConge.php:

/**
     * @ORM\Column(type="string", length=255, unique=true)
     */
    private $nom;
/**
     * @ORM\OneToMany(targetEntity="App\Entity\Absence", mappedBy="typeConge", cascade={"persist", "remove"})
     */
    private $absences;

SoldeConges.php:

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\TypeConge", cascade={"persist", "remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $typeConge;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="soldeConges")
 * @ORM\JoinColumn(nullable=false)
 */
private $user;

/**
 * @ORM\Column(type="float", nullable=true)
 */
private $solde;

Absence.php:

/**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="absences")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;
/**
     * @ORM\ManyToOne(targetEntity="App\Entity\TypeConge", inversedBy="absences")
     * @ORM\JoinColumn(nullable=false)
     */
    private $typeConge;

User.php:

/**
     * @ORM\OneToMany(targetEntity="App\Entity\SoldeConges", mappedBy="user", orphanRemoval=true, fetch="EAGER", cascade={"remove"})
     */
    private $soldeConges;
/**
     * @ORM\OneToMany(targetEntity="App\Entity\Absence", mappedBy="user", orphanRemoval=true)
     */
    private $absences;

Итак, в моих настройках администратора, если я удаляю тип отпуска, он должен следовать этому шаблону:

  • Подавление отсутствий, связанных с типом отпуска.
  • Удаление «soldeUser» из пользователя для балансов, связанных с типом отпуска.
  • Подавление 'typeConge '(тип праздника)

Но с моим кодом у меня возникает эта ошибка при попытке удалить тип праздника:

Исключительная ситуация при выполнении'DELETE FROM type_conge WHERE id =?'с параметрами [9]:

SQLSTATE [23000]: нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено (congestest2. solde_conges, CONSTRAINT FK_BE0A8BDB753BDA5 FOREIGN KEY(type_conge_id) ССЫЛКИ type_conge (id))

...