2012-04-04 10 views
2

のは、私は2つのテーブルを持っていると言うためにトリガされます。 Category.productCount - どのトリガでも更新/削除/挿入時にこのカウントが更新されるため、データベースサーバはカテゴリ内の製品数をカウントすることができますので、心配する必要はありません。データベース側のトリガをDoctrine2エンティティと何らかの形で同期させる方法はありますか?私は実際にPHP側でこれらのカウンタを再計算したくないのです。私たちは複数のサーバでそれを実行するつもりです。Doctrine2とデータベース側では、非正規化フィールド

答えて

1

カテゴリに新しい製品を追加したいという質問がある場合は、それを永続化してからCategory.productCountをデータベースから更新してもらえますか?

$entityManager->refresh($category); 

エンティティをデータベースからリロードするには、次の手順を実行します。私はそれを自分でやったことはありませんが、ライフサイクル機能を使ってこれを自動化することができると期待しています。

しかし、データベースに永続化せずにカウンタをローカルで増やすほうが良いのではないかと思います。トリガでデータベース操作を実行させますが、要求内でローカルにカウントを更新します。

+0

これは良いアイデアのように聞こえる、ありがとう!私が見る唯一の問題は、Doctrineがすべての挿入または更新ステートメントでデータベースに非正規化フィールドを送信するということです。この意味でフィールドが「読み取り専用」であることをDoctrineに伝える方法はありますか?さもなければ、サーバー側でトリガーをして、挿入や更新時の非正規化カウントを無視することができます...どちらもうまくいくでしょう;) – KOHb

+0

私は読み取り専用についてはわかりません。延期された明示的なhttp://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/change-tracking-policies.htmlのような変更追跡ポリシーを使用し、カテゴリを永続させないほうが良いでしょうオブジェクトを完全に。 – Cerad

関連する問題