التركيبات والميراث في symfony
-
28-09-2019 - |
سؤال
لدي مخطط قاعدة بيانات في symfony مثل هذا:
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) }
كما ترى ، "الخريجين" لديه ميراث ملموس من "persona". الآن أحاول إنشاء تركيبات لهذا الجدولين ، ولا يمكنني جعل العقيدة لتحميلها. يعطيني هذا الخطأ:
SQLSTATE [23000]: انتهاك قيود النزاهة: 1452 لا يمكن إضافة أو تحديث صف الطفل: فشل قيود المفاتيح الخارجية (
eat/alumno__beca
, ، قيدalumno__beca_persona_id_alumno_id
مفتاح غريب (persona_id
) المراجعalumno
(id
) على حذف تتالي)
هل يعرف أحدهم كيف يكتب لاعبا اساسيا لجدول ورثت من آخر؟
شكرًا!
المحلول
لست متأكدًا مما إذا كانت هذه هي مشكلتك الوحيدة ، ولكن عند تحميل التركيبات للجداول التي لها علاقات ، قم بتحميلها بشكل فردي بترتيب لا ينتهك قيودهم الرئيسية الخارجية: الوالد الأول ، ثم الطفل ... ليس كل شيء معًا. لا يمكن أن يكون سجل الطفل "من الناحية القانونية" بدون والديه ، إذا كنت قد حددت علاقاتك بهذه الطريقة ، وإلا فإن القيد يفشل.
نصائح أخرى
لقد بدأت Symfony في الأسابيع الماضية ولدي مشكلة اليوم مع هذه ..
المشكلة الأولى هي ، يجب أن تكون مفاتيحك الأجنبية عددًا صحيحًا. ليس عدد صحيح (3) .. يجب ألا يكتب حجم الحقول إذا كان مفتاحًا خارجيًا. وأيضًا رمزك صحيح ، هذه مجرد معلومات.
المشكلة الثانية هي ، يجب عليك إزالة فهارس المفاتيح الخارجية على جدول قاعدة البيانات. إذا تم إنشاؤه بالفعل ، عند إدراج SQL مرة أخرى ، فإنه يعطي خطأ.