私は3つの教義の実体を持っています。 1つはUser
、2番目はProduct
、3番目はProductUsers
です。Doctrine2のOneToMany/ManyToOne関連の深さ/ループを制限する方法は?
ので、User
はProductUsers
と同じProduct
とOneToMany
関連がProductUsers
とOneToMany関連を持っています。 ProductUsers
は、User
とProduct
の両方に関連付けられたManyToOne
を持っています。ように:
ユーザーは複数の製品を使用でき、製品には複数のユーザーが参加できます。 ProductUsers
には、単に関係以外の関係に関するいくつかの追加情報があります。
問題は、User
オブジェクトを1つフェッチするときに、それに関連付けられたProductUsers
が付属しており、それにはProduct
が関連付けられています。それだけでなく、Product
には、すべてProductUsers
というものが付属していて、かなりのオーバーヘッドであるUser
のオブジェクトです。
This質問は私の問題に密接に関連しています。
私はdoctrineレベルで、JMSSerializerBundle MaxDepth
のように制限することを検討しています。教義におけるそのようなオーバーヘッドを制限する方法はありますか?
これはDoctrineが動作する方法です。取得するコレクションは、実際のデータがDBからフェッチされる基になるデータにアクセスする場合にのみ、レイジーコレクションにする必要があります。デフォルトでは、ユーザーをフェッチするときにSELECT * FROMユーザーのクエリのみが実行されます。一度にレコードをフェッチするには、ORM Query Selectでそれらを結合する必要があります。$ qb-> select( 'u'、 'up') – mblaettermann