Я работаю с Symfony 1.2 (не могу обновить, мне решать) с Propel в качестве ORM. У меня странная проблема с моими отношениями «многие ко многим».
Допустим, у вас есть две таблицы A
и B
и отношение «многие ко многим» A_has_B
. Допустим, у меня есть сущность a
в A
, сущность b
в B
и отношение в A_has_B
, для которого PK равен (a_id, b_id)
. Теперь, если я обновлю сущность b
(не ее идентификатор, а другое поле, не являющееся ее PK), используя модули, сгенерированные администратором Symfony, то (a_id, b_id)
удаляется из базы данных.
Это происходит только с использованием бэкэнда Symfony. Это не происходит с помощью phpmyadmin, где я могу обновить a
и b
без потери отношения (a_id, b_id)
.
Все таблицы MySQL / InnoDB. Столбцы A_id
и B_id
в A_has_B
являются внешними ключами, указывающими на идентификаторы A
и B
. У меня есть ON DELETE CASCADE
и ON UPDATE CASCADE
в обоих столбцах.
Большое спасибо за помощь.
ОБНОВЛЕНИЕ: Вот схема yml для трех таблиц Team
и Participants
и ее отношение
propel:
_attributes:
package: lib.model
defaultIdMethod: native
team:
_attributes: { phpName: Team }
id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
name: { type: VARCHAR, size: '255', required: true }
description: { type: LONGVARCHAR, required: false }
participant:
_attributes: { phpName: Participant }
id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
name: { type: VARCHAR, size: '255', required: true }
team_has_participant:
_attributes: { phpName: TeamHasParticipant }
team_id: { type: INTEGER, size: '11', primaryKey: true, required: true, foreignTable: team, foreignReference: id, onDelete: CASCADE, onUpdate: CASCADE }
participant_id: { type: INTEGER, size: '11', primaryKey: true, required: true, foreignTable: participant, foreignReference: id, onDelete: CASCADE, onUpdate: CASCADE }
_indexes: { participant_id: [participant_id] }
Скажем, я обновляю description
поле в team
сущности, затем я теряю все team_has_participant
отношения, которые имели эту внешнюю team
сущность.