Les luminaires à tubes et à l'héritage dans Symfony
-
28-09-2019 - |
Question
J'ai un schéma de base de données dans Symfony comme ceci:
Persona:
actAs: { Timestampable: ~ }
columns:
primer_nombre: { type: string(255), notnull: true }
segundo_nombre: { type: string(255) }
apellido: { type: string(255), notnull: true }
rut: { type: string(255) }
email: { type: string(255) }
email2: { type: string(255) }
direccion: { type: string(400) }
ciudad: { type: string(255) }
region: { type: string(255) }
pais: { type: string(255) }
telefono: { type: string(255) }
telefono2: { type: string(255) }
fecha_nacimiento: { type: date }
Alumno:
inheritance:
type: concrete
extends: Persona
columns:
comentario: { type: string(255) }
estado_pago: { type: string(255) }
Alumno_Beca:
columns:
persona_id: { type: integer, primary: true }
beca_id: { type: integer, primary: true }
relations:
Alumno: { onDelete: CASCADE, local: persona_id, foreign: id }
Beca: { onDelete: CASCADE, local: beca_id, foreign: id }
Beca:
columns:
nombre: { type: string(255) }
monto: { type: double }
porcentaje: { type: double }
descripcion: { type: string(5000) }
Comme vous le voyez, "alumno" a un héritage concret de "persona". Maintenant, je suis en train de créer des accessoires pour ces deux tables, et je ne peux pas la doctrine de les charger. Il me donne cette erreur:
SQLSTATE [23000]: contrainte d'intégrité violation: 1452 Impossible d'ajouter ou mettre à jour un ligne enfant: une contrainte de clé étrangère échoue (
eat/alumno__beca
, CONTRAINTEalumno__beca_persona_id_alumno_id
FOREIGN KEY (persona_id
) RÉFÉRENCESalumno
(id
) CASCADE ON SUPPRIMER)
Est-ce que quelqu'un sait comment écrire un appareil pour une table héritée d'une autre?
Merci!
La solution
Je ne sais pas si cela est votre seul problème, mais quand les appareils de chargement pour les tables qui ont des relations, chargez-les individuellement dans un ordre qui ne viole pas les contraintes de clé étrangère: premier parent, enfant ... pas tout ensemble. Un enregistrement enfant ne peut pas « légalement » exister sans son parent, si vous avez défini vos relations de cette façon, ou bien la contrainte échoue.
Autres conseils
J'ai commencé symfony dernières semaines et j'ai problème aujourd'hui avec ces ..
premier problème est, vos clés étrangères doit être un entier. pas entier (3) .. ne doit pas écrire la taille des champs si elle est une clé étrangère. Et votre code est correct, c'est juste une info.
deuxième problème est, vous devez supprimer que les index de clé étrangère sur votre table de base de données. si elle est déjà créé, lorsque vous insérez-sql encore, il donne une erreur.