Светильники и наследование в Symfony - PullRequest
3 голосов
/ 20 апреля 2010

У меня есть схема базы данных в 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) }

Как видите, у "alumno" есть конкретное наследование от "персона".Сейчас я пытаюсь создать приборы для этих двух таблиц, и я не могу сделать Doctrine для их загрузки.Это дает мне эту ошибку:

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (eat/alumno__beca, CONSTRAINT alumno__beca_persona_id_alumno_id FOREIGN KEY (persona_id) ССЫЛКИ alumno (id) НА УДАЛЕННОМ КАСКАДЕ)

Кто-нибудь знает, как написать фиксатор для таблицы, наследуемой от другой?

Спасибо!

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Я начал Symfony в последние недели, и у меня сегодня проблемы с этим ..

Первая проблема, ваши внешние ключи должны быть целыми числами. не целое число (3) .. не следует записывать размер поля, если это внешний ключ. А также ваш код правильный, это просто информация.

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

0 голосов
/ 20 апреля 2010

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

...