2011-12-30 10 views
-1

私はPropelをORMとして使用してSymfony 1.2(更新できません。私は多対多の関係に奇妙な問題を抱えています。symfonyで外国のエンティティを更新するとき多対多の関係がなくなります

2つのテーブルABと多対多の関係A_has_Bがあるとします。私は、のaエンティティ、Bbエンティティ、A_has_Bの関係がPKが(a_id, b_id)であるとします。 symfonyのadmin生成モジュールを使用してbエンティティ(そのIDではなく、そのPKでない別のフィールド)を更新すると、(a_id, b_id)がデータベースから削除されます。

これは、Symfonyバックエンドを使用してのみ発生します。 phpmyadminでは(a_id, b_id)の関係を失うことなくabを更新できます。

すべてのテーブルはMySQL/InnoDBです。 A_idB_idの中のA_has_Bは、ABのIDを指す外部キーです。両方の列にON DELETE CASCADEON UPDATE CASCADEがあります。

ありがとうございました。

UPDATE:3つのテーブルTeamParticipantsとその関係

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] } 

が、私はそのすべてteam_has_participant関係を失うよ、私はteamエンティティでdescriptionフィールドを更新言うためにここは、YMLスキーマですその外国teamエンティティを持っていた。

+0

ymlまたはxmlスキーマを投稿できますか? –

+0

@Vlad Nedelcu、スキームを –

+0

という質問に更新しました。問題は表示されません。 'b'エンティティのIDを更新すると、リンクテーブルエントリはもはや有効ではなくなります。それがどのように働くことになったのか。 –

答えて

0

私は問題が何であるかを理解しました。もちろん、何かばかげている。私の関係で

は、私がAフォームからのみ許可の変更にBにgenerator.ymlでa_has_b_listフィールドhiddingたA_has_B言います。しかし、それは間違いです。generator.ymlのフィールドを隠すだけで、それが解除されず、単に隠されて空白の値でポストされます(データベースをオーバーライドします)。それはBconfigure()方法でウィジェットの設定を解除する必要があります:

unset($this->widgetSchema['a_has_b_list']; 

この方法では、何も掲示されていないと、データベースが上書きされていません。

関連する問題