外部キーの依存関係を変更するときに、他の関連テーブルを更新するのに最適な場所を見つけようとしています。
正確には、「フラット」と呼ばれるテーブルと、「部屋」と呼ばれる別のテーブルがあります。
flat_id: {タイプ: INTEGER、foreignTable:flat、foreignReference: id、必須: true }
Room::SetFlatId() メソッドと同様に、Propel (1.3) は Room::SetFlat() を提供してくれました。
しかし、フラットに部屋を追加するとき、データベース定義よりも高いレベルで一貫性を保つために、関連する他のいくつかのテーブルを自動的に変更したいと考えています。Flat::addRoom(Room $room) をオーバーライドしてその親を呼び出してから、さらに変更を加えようと思いました。
しかし、'flat_id' 列が必要なため、Room オブジェクトが保存される前に SetFlatId() と setFlat() のいずれかが常に呼び出されるため、問題が発生しました。
ただし、Room オブジェクトが保存される前は ID がないため、他のテーブルの関連レコードを識別する room_id がないため、拡張 addRoom は機能しません。
これは、ルームが保存されたことに依存する Flat::addRoom() にコードを入れてはならないことを示唆しているようです。しかし、コードをどこに置くことができますか?
明らかに、Room オブジェクトを作成または変更した後に手動で呼び出すように要求することもできます。しかし、それが実際に行っていることは、一種のより高いレベルのデータベースの整合性を維持することなので、私はそれをしたくありません。「保存」メソッドの一方または両方に入れることができます。ただし、論理的には、部屋とフラットの間の関連付けが変更された場合にのみ実行する必要があります。
このコードはどこに行くべきですか?