1

しばらく前に、Doctrine のクエリ キャッシュが思ったように機能しなかったので、いくつか質問しました。

リレーションシップがキャッシュされなかった理由についての質問:

Doctrineの結果キャッシュが結合でクエリをキャッシュしない

デタッチとマージを使用してリレーションシップをキャッシュする方法に関する質問:

Doctrine のデタッチ、キャッシング、マージ

なぜもっと早くこれをしなかったのかはEchoSQLLoggerわかりませんが、Doctrine を有効にしたところ、エンティティを再びマージすると、各ページが 3 つのクエリを実行していることがわかりました。

私のエンティティはusercompany、およびprivilegeuser、他の 2 つの親です。最初に を取得しusercompany参加したときprivilegeは、 を実行detachしてuserから に入れApcCacheます。キャッシュからフェッチするとき、Doctrine のすべての魔法がそのままの状態でエンティティをmerge返す a を実行します。user

問題は、 を呼び出すと、 、、および をmerge照会することです。これはどのように機能するはずですか?usercompanyprivilegemerge

userデータベースを呼び出さずに、2 つの関係をそのままにしてエンティティをキャッシュする方法はありますか?

4

1 に答える 1

0

将来これを読む人(または私自身)に:

PHP Incomplete Class個々のエンティティごとに個別のクエリとキャッシュ保存を行うことで、問題を回避することになりました。たとえば、質問のユーザー/会社/特権のジレンマ。ユーザーをキャッシュし、会社をキャッシュして、$user['company']その結果でオーバーライドします。特権についても同じです。

これは機能しているように見えますが、真剣です。Doctrine のキャッシングには助けが必要です。

于 2013-01-13T10:38:57.917 に答える