Для устранения нарушения ограничения целостности требуется справка по Symfony 1.4 Doctrine - PullRequest
0 голосов
/ 18 ноября 2011

Цель: при удалении пользователя все записи для пользователя в пользовательской категории также должны быть удалены.

Схема:

User:
  actAs: { Timestampable: ~ }
  columns:
    first_name: { type: string(255) }
    name: { type: string(255) }
    company: { type: string(255) }
    email: { type: string(255) }
    phone: { type: string(255) }
    language_id: { type: integer, notnull: true }
    token: { type: string(255) }
    activated: { type: boolean, default: false }
  relations:
    Categories:
       class: Category
       local: user_id
       foreign: category_id
       refClass: UserCategory
       type: many

UserCategory:
  actAs: { Timestampable: ~ }
  columns:
    user_id: { type: integer, notnull: true }
    category_id:      { type: integer, notnull: true }

Category:
  actAs: { Timestampable: ~ }
  columns:
    language_id:  { type: integer, notnull: true }
    name: { type: string(255), notnull: true, unique: false }
    revision: { type: integer, notnull: false }
    icon:     { type: string(255) }
  relations:
    User:
       class: User
       local: category_id
       foreign: user_id
       refClass: UserCategory
       type: many

Что происходит:

SQLSTATE [23000]: нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (testtable. user_category, CONSTRAINT user_category_user_id_user_id FOREIGN KEY (user_id) ССЫЛКИ user (id))

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Как и greg0ire сказал , определение каскада для UserCategory сделало свою работу.Он полностью пропустил блок отношений:

UserCategory:
  actAs: { Timestampable: ~ }
  columns:
    user_id: { type: integer, notnull: true }
    category_id:      { type: integer, notnull: true }
  relations:
    User: {onDelete: CASCADE, local: user_id, foreign: id, foreignAlias: Users}
    Category: {onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: Categories}
1 голос
/ 18 ноября 2011

Вам необходимо определить каскадную операцию для вашего отношения.См. onDelete внешнего ключа для чайников статья (не только для чайников) с примером для доктрины.

1 голос
/ 18 ноября 2011

Прочтите § документации доктрины и выберите наиболее подходящее решение между каскадами на уровне приложений и каскадами на уровне базы данных

...