4

これは非常に簡単なはずですが、答えが見つからないようです...私がやろうとしているのは、ページバンドルを作成することです。その部分はかなり簡単でした。isHomeデータベースに列を追加しました。基本的には、ホームページであるページにフラグを設定したいと考えています。明らかに、その値を true に設定できるのはデータベース内の 1 つの行だけであり、残りは false にする必要があります。

差し当たり、すべてのレコードが false であるかどうかは気にしないとしましょう。多くても 1 つのレコードを true にするだけです (ただし、少なくとも 1 つのレコードを true にすることを強制するのは良いことですが)。

私が最初に考えた方法は、現在のオブジェクトが値を true に設定したisHome場合にすべての値を falseに設定するメソッドをリポジトリに作成し、そのレコードを保存することでした。良いアイデアのように思えましたが、エンティティからリポジトリを呼び出すことができない/すべきではないようです。pageisHome

isHomeエンティティから1 つのレコードのみを true に設定できるようにする方法についてのアイデアはありますか?

MySQL データベースと doctrine2 で Symfony 2.3.1 を使用しています。

4

1 に答える 1

3

エンティティに PrePersist および PreUpdate ドクトリンリスナー/サブスクライバーを追加するだけです。

リスナーがトリガーされると、次のようなものを使用して isHome が true に設定されている他のエンティティのリポジトリを照会しますfindBy(array('isHome' => true))...

...次に、見つかったすべてのエンティティを isHome false で更新します。エンティティを永続化/更新した後、ホームに残っているのは常に 1 つだけです。

于 2013-07-12T00:02:41.657 に答える