Не удается удалить объекты из-за ограничений внешнего ключа - PullRequest
0 голосов
/ 20 июля 2010

Это странно

Возьмем эту схему:

Contact:
  actAs: [Timestampable,SoftDelete]
  columns:
    first_name:  { type: string(255), notnull: true }
    second_name:  { type: string(255), notnull: true }
  relations:
    Forums:
      class: Forum
      refClass: ContactForum
      local: forum_id
      foreign: contact_id 
      foreignAlias: Contacts
    ContactForums:
      local: id
      foreign: contact_id
      class: ContactForum
      type: many
      foreignType: one
      cascade: [delete]

Forum:
  actAs: [Timestampable,SoftDelete]
  columns:
    name:  { type: string(255), notnull: true }
  relations:
    ContactForums:
      class: ContactForum
      local: id
      foreign: forum_id
      type: many
      cascade: [delete]

ContactForum:
  actAs: [Timestampable]
  columns:
    contact_id:  { type: integer, primary: true }
    forum_id: { type: integer, primary: true }

Затем, если мы свяжем пару Forum объектов с Contact объектом, а затем попробуем удалить этуContact объект, мы получаем это сообщение об ошибке:

Нарушение ограничения целостности: 19 contact_forum.created_at не может быть NULL

Если вы добавили SoftDelete в таблицу ссылок, удалитеработает правильно, как и SoftDelete.Однако мы не хотим SoftDelete для таблицы ссылок, так как это означает, что наши первичные ключи не работают правильно.Это ошибка?

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Это ошибка доктрины.Сообщение об ошибке здесь: http://www.doctrine -project.org / jira / browse / DC-795 с исправлением для исправления.

0 голосов
/ 21 июля 2010

Я думаю, что ваши идентификаторы для ваших многих-многих отношений испорчены, предполагая, что симфония использует Doctrine 1.2.2.Попробуйте это:

Contact:
  actAs: [Timestampable,SoftDelete]
  columns:
    first_name:  { type: string(255), notnull: true }
    second_name:  { type: string(255), notnull: true }
  relations:
    Forums:
      refClass: ContactForum
      local: contact_id
      foreign: forum_id 
      cascade: [delete]

Forum:
  actAs: [Timestampable,SoftDelete]
  columns:
    name:  { type: string(255), notnull: true }
  relations:
    Contacts:
      refClass: ContactForum
      local: forum_id
      foreign: contact_id
      cascade: [delete]

ContactForum:
  actAs: [Timestampable]
  columns:
    contact_id:  { type: integer, primary: true }
    forum_id: { type: integer, primary: true }

В отношениях, когда указывается класс с refClass, local и foreign означают «столбец в таблице этого другого класса, который представляет меня» и «столбец в этомдругие таблицы классов, которые представляют другие ", соответственно.

Редактировать: Я не уверен, что ваше определение для отношения форумов в разделе Контакт также является правильным.Предполагая, что вам просто нужно отношение «многие ко многим», оно может быть удалено.

Двойное редактирование: Смотри.Вот вся схема, которая вам нужна для правильного функционирования и каскадного отношения «многие ко многим».Вам не нужны две взаимосвязи, определенные для правильного каскадного удаления.

...