0

私がプレイしているビデオ ゲーム用のサイトがあり、追加のキャッシュを実装してサイトのパフォーマンスを改善しようとしています。カスタム リポジトリ関数にクエリ結果キャッシュを実装することはできましたが、組み込み関数 (findOneById など) にクエリ結果キャッシュを含める方法を説明している場所を見つけることができませんでした。私のデータベースクエリの多くは、これらの「ネイティブ」リポジトリ機能から実行されるため、これを行うことに興味があります。

例として、id、name、race、class などのプロパティを持つキャラクター エンティティ オブジェクトがあります。

このオブジェクトの人種とクラスは、人種とクラスの他のエンティティ オブジェクトへの参照です。表示用にキャラクターをロードすると、名前 (findOneByName) でキャラクターを取得し、テンプレートでキャラクターの人種/クラスを$characterObject->getRace()->getName(). テンプレートでこれらのメソッドを呼び出すと、Race/Class エンティティ テーブルでクエリが実行され、ID でエンティティがフェッチされます (findOneById だと思います)。

リポジトリに独自の findOneById 関数を作成しようとしましたが、これらの状況では呼び出されません。

これらのクエリ結果がキャッシュ可能になるように doctrine/symfony をセットアップするにはどうすればよいですか?

Symfony 2.1.3 と doctrine 2.3.x を実行しています

4

2 に答える 2

1

doctrine の組み込み関数でクエリ キャッシュを有効にできないことがわかりました。後でもう一度見つけた後、理由を説明するリンクを投稿します。

于 2012-12-09T06:53:48.497 に答える
0

エンティティはおそらく次のようになります。

MyBundle\Entity\Character:
    type: entity
    table: Character
    fields:
      id:
        id: true
        type: bigint
      name:
        type: string
        length: 255
    manyToOne:
      race:
        targetEntity: Race
        joinColumns:
          raceId:
            referencedColumnName: id

MyBundle\Entity\Race:
    type: entity
    table: Race
    fields:
      id:
        id: true
        type: bigint
      name:
        type: string
        length: 255
    oneToMany:
      characters:
        targetEntity: Character
        mappedBy: race

その場合は、キャラクターエンティティのマッピングを変更して、レースエンティティも熱心にロードするようにします。

MyBundle\Entity\Character:
  ...
    manyToOne:
      race:
        targetEntity: Race
        joinColumns:
          raceId:
            referencedColumnName: id
        fetch: EAGER

オプションに関するドクトリンドキュメントfetch@ManyToOne

于 2012-10-11T01:17:30.077 に答える