J'ai lutté avec defining cascade behavior dans Doctrine ORM.Comment cascader des suppressions avec Doctrine 1.2?
Selon the documentation, on est censé utiliser onDelete: CASCADE
pour la cascade au niveau de la base de données (ce que j'essaie de réaliser ici).
Un exemple complet peut être vu sur le Symfony tutorial.
Cependant, toutes ces spécifications en cascade sont ignorées dans mon schéma.
Voici l'extrait pertinent:
Advancement:
columns:
association_id:
type: integer(4)
notnull: true
task_id:
type: integer(4)
notnull: true
state:
type: enum
values: ['todo', 'current', 'done', 'cancelled']
notnull: true
relations:
Association:
class: Association
local: association_id
foreignType: one
onDelete: CASCADE
Task:
class: Task
local: task_id
foreignType: one
onDelete: CASCADE
Bien sûr, les tables et tâches sont correctement définis Association. Je ne les publierai pas ici en premier lieu pour éviter une trop longue question, mais s'il vous plaît demandez si cela semble nécessaire.
Voici le SQL généré (linebreaks mines):
CREATE TABLE advancement
(id INTEGER PRIMARY KEY AUTOINCREMENT,
association_id INTEGER NOT NULL,
task_id INTEGER NOT NULL,
state VARCHAR(255) NOT NULL);
Pas trace d'un CASCADE
(ni REFERENCES
, par la voie ...). Bien sûr, la cascade ne fonctionne pas, et j'ai dû l'implémenter manuellement en modifiant les actions backend par défaut.
Est-ce que quelqu'un sait ce que je fais mal ici?
Doctrine génère les relations de clés étrangères à la fin du sql généré (data/sql/schema.sql), vérifiez si elles sont présentes. – Maerlyn
Non, j'ai en fait 'grep'ped à travers tout le SQL généré, et aucune trace de' CASCADE' ... Merci pour la précision si! – MattiSG