2011-10-09 4 views
2

私はPropel 1.6を使用しており、特定のデータベースのすべてのテーブルをバージョンする必要があります。私はいくつかのテーブルを持っていて、それぞれがスキーマで定義されたバージョン対応テーブルを持っています(テーブル 'ロール'はバージョン対応のテーブルとして 'role_versionable'テーブルを持っています)。 'ロール'にレコードを保存するときに、保存を行う前に既存のレコードをrole_versionableにコピーしたいと思います。doSelectでPropelオブジェクトの初期コピーを取得する

これはそれ自体は些細なことです。スキーマ全体のbaseClassをカスタムクラス(BaseObjectを拡張)に設定し、生成されたすべての行モデルクラスがこのクラスを拡張しています。私のカスタム保存ルーチンでは、私は新鮮な選択をして、それをバージョン対応テーブルに保存しています。しかし、私はすべての行クラスでdoSelect [One]を傍受することができますが、モデルのすべてのテーブルに対して子オブジェクトを生成する必要はありません。私はpostSelectにフックすることができますか、それを選択した後のオブジェクトの初期状態をつかむために、すべてののdoSelect後に自動的に呼び出される方法がある場合

従って私は疑問に思って?これにより、行をバージョンアップするときに余分な選択を省くことができます。

(詳細:私はarchive_behaviourサポートを信じていないもの、バージョンテーブルに余分なメタデータを追加する必要があるように私は、カスタム方法でこれをやっている)

+0

一つのアプローチは、(システムはので、私は、ユーザーに代わって、プログラムでそれをしなければならないでしょうDBアプリケーションですが、それはかなり達成可能である)私の仲間のそれぞれの子クラスを生成することです。これは私に各doSelectにフックする機会を与えるだろうが、少し控えめであると感じる。だから...どんなアイデア? :-) – halfer

+0

StackOverflowが言っています: "この質問には、+50名の評判の賞金がありました。あなたは賞金を授与するのに23時間あります"。 Bah;正確にゼロの回答を受け取ったので、私は超人的忍耐のために自分自身にそれを授与することができますか? :) – halfer

+0

私はPropelメーリングリストでこのメッセージを返すかもしれません。しかし、私の最初のコメントでアプローチを取ることは相当な努力ではありません。アプローチの中で最もエレガントではありませんが、確かに動作するようにしてください。 – halfer

答えて

1

は、私の知る限り、使用する方法はありませんdoSelectへのコールの前または後にコールします。あなた自身のクラスでこのメソッドをオーバーライドし、自分でフックを追加することをお勧めします。私はおそらくそれを行うために自分自身のピアビルダーを書くでしょう。私が取ることができる

ウィリアム

+0

ああ、カスタムピアビルダ - 良いアイデア。私のアプリケーションは、ユーザーが開始したデータベースの生成のためにあるので、私は正規表現の検索を使用して、私のカスタムビルドプロセスの一環として、すべての行のクラスに置き換えることを考えていました。しかし、あなたの提案はよりエレガントです!私は将来これを試してみることにします。 – halfer

+0

プロペルでの作業に感謝します。 – halfer

関連する問題