Doctrineにアソシエートされたマップされたエンティティがある場合、そのマッピングされたアソシエーションを取得せずにクエリをダウンさせたくない場合があります。Doctrineでアソシエーションマッピングなしのエンティティをフェッチする方法2
たとえば、私は、リンクされたデータベーステーブルのチェーンに関連付けられたエンティティのセットを持っています。彼らはすべてOnetoManyの関連団体であり、製品ページのマトリックスの価格階層として機能します。
SitePage->SiteMatrix->SiteItems->SiteItemPrices.
関連マッピングが完全に動作し、私が取得するfindBy方法を使用する場合、ルートは、チェーンダウンマップされたエンティティを表す配列を含むオブジェクトSitePage:彼らはように表現することができます。言い換えれば、SitePageオブジェクトにはすべての価格が含まれているすべてのアイテムを含むすべての行列が含まれています。ここまでは順調ですね。
私の問題は、サイトのページのリストを取得するたびに、doctrineがアソシエーションマッピングツリー全体を歩いていて、非常に遅いデータベース全体を返すことです。いつか私は自分のSitePageエンティティをIDで取得し、マップされた関連付けをすべて含んでいないだけです。
私は団体の怠惰と、余分な遅延ロードに見てきたが、彼らは唯一の公式ドキュメントは役に立ちから遠いなどをfindBy特定の機能に影響を与え、そしてないように見える:スタックオーバーフローの http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/extra-lazy-associations.html
他の同様の質問を持っています返されなかった: Doctrine 2 Association Mapping Overhead?
マッピングされた関連付けなしでエンティティを簡単に取得する方法はありますか?私が現在見ることができる最も簡単な方法は、それぞれのデータベーステーブルに対して2つのエンティティを作成することです.1つはアソシエーションマッピングで、もう1つは必要な別の状況では使用しません。あなたが単にエンティティを取得し、それを他のエンティティにリンクするのか、それともそれを単独でフェッチするのかを指定することはできません。
この件に関するお問い合わせありがとうございます。
Doctrineは、デフォルトでロードアソシエーションを遅延させる必要があります。あなたのすべての団体が熱心な負荷に設定されているようです。アソシエーションの問題を除外するために、アソシエーションマッピングを使用して2つのエンティティのコードを追加できますか? – JimL
ご回答いただきありがとうございますが、この問題は1年以上経過しています。私はシリアライザを使用してエンティティを配列にシリアル化していたことが判明しました。このシリアライザは、すべてのゲッタ関数をアソシエーションマッピングツリーで呼び出していました。 JMSシリアライザバンドル内の除外、最大深度、およびグループ機能について学ぶと、すべてが明確になり、より多くの制御で関連付けを行うことができました。 – Asq