我有一個相同類的活動記錄對象的數組。 該對象具有已定義的關係。 在「父」對象初始化之後,有沒有辦法以「批量」方式讀取相關對象?初始化父對象後初始化相關的對象
例 我已經定義AR類郵政,用戶,註釋 * 郵政 *有關係所有者(belongs_to的)到類用戶和關係評論(HAS_MANY)到類評論
我有一個數組類後的對象的$帖子。 對於不同的原因,$帖子不能從一開始初始化
'with' => array('owner', 'comments')
如果我這樣做:
foreach ($posts as $post) {
var_dump($post->owner);
var_dump($post->comments);
}
每$發佈查詢對子級的retriving 所有人提出和查詢評論。 這可能會導致大量查詢和腳本執行緩慢。 更好的方法是在一個步驟中讀取一種類型的所有相關對象。
難道這樣的事情存在retriving有一定關係的所有相關對象爲對象的數組?:
Post::readRelatedObject($posts, 'owner');
Post::readRelatedObject($posts, 'comments');
我需要這個形式給出的幾個原因:
- 有時我不能提前告訴我是否需要關係初始化。
- 在「父母」之後閱讀相關對象可能會快得多,因爲連接速度可能會很慢。
- 緩存可能會受到影響,因爲有時候「父」對象不能與相關對象具有相同的緩存時間,因此,在從緩存中提取父對象後,以分組/批量方式讀取相關對象可能是有用的。例如:$ post已被緩存,但我無法緩存最後3條評論和帖子。
yii是否包含這樣的東西?或者可以幫助的插件?
謝謝
這是什麼原因,當初始化'$ posts'數組時,你不能指定'with'? – dInGd0nG 2013-02-22 05:42:37
@ dInGd0nG我有三個主要原因: 1.性能。我有很多關係的對象。如果我使用「with」加入它們,則可能會導致查詢速度很慢且很慢。 2.遺留代碼。作爲一個函數的結果,我有對象的父對象(在示例$ posts中)。將相關對象附加到結果上會更方便,而不是修改該函數(這可能導致破壞代碼的其他部分)。 3.靈活性。我不會被迫事先考慮我需要什麼樣的關係,我可以輕鬆地(並且減少數據庫壓力)將關係附加到一組父對象上。 – humeniuc 2013-02-22 07:15:55