私はこの基本的なモデルを持っています:
テーブルからエントリをフェッチしbook
て出力をダンプすると、次のようになります。
// no other Doctrine queries were made before this one:
$book = $em->getRepository('Entities\Book')->find(1);
var_dump($book);
私はBook
エンティティを取得しますが、プロキシされたエンティティも取得しますAuthor
:
object(Entities\Book)#179 (3) {
["id":"Entities\Book":private]=>
int(1)
["title":"Entities\Book":private]=>
string(7) "MyBook1"
["author":"Entities\Book":private]=>
object(Doctrine\Proxy\__CG__\Entities\Author)#171 (5) {
[...] // many more lines of output
私の理解では、のプロキシエンティティAuthor
が期待されます。これは、実行時にテーブルから情報を遅延ロードする方法Doctrine
だからです。author
$book->getAuthor()
Q1:この段階で、プロキシされた作成者エンティティの存在が予想されることを確認しますか?
しかし、私が驚いたのは、var_dump
出力(私があなたが見るためにpastebinにアップロードした)を見ると、それは行以上のものを含んでいるということ10,000
です!私が見つけることを期待していなかったものには、モデルへの参照dummy_table1
や、モデルにdummy_table2
関連していない、book
またはauthor
モデル内にないものが含まれます。
["dummy_table1"]=> // line 1301
object(Doctrine\DBAL\Schema\Table)#194 (10) {
["dummy_table2"]=> // line 1384
object(Doctrine\DBAL\Schema\Table)#191 (10) {
Q2:それも期待されていますか?
そこから私は疑問に思っていました:$book
キャッシュに含まれている情報を保存しserialize
て、後でビューで再利用したい場合(いくつかの操作を実行することについて話しているのではなく$book
、いくつかのプロパティを出力するだけです)、私が本のタイトルのために保存するのと同じように正気500KB
ではありません、それは私をこの最後の質問に連れて行きます:
Q3:Doctrineクエリの結果をどのようにキャッシュしますか?エンティティ全体をキャッシュにシリアル化し、必要な情報を配列に抽出して、その配列をキャッシュに保存しますか?そうであれば、すぐに面倒になりませんか...?