鑑於以下型號:如何在CodeIgniter DataMapper ORM中有效地加載多個has_many關係?
類別:的has_many(「模板」) 模板:的has_many(「標籤」,「過程」)
什麼是加載相關的所有類別的所有對象的最有效方法?
舉例來說,我目前在做以下,但希望有一個更好的辦法:
// Load all Category objects
$categories = new Category();
$categories->get();
// Load all Template objects related to each Category
foreach($categories as $category)
{
$category->templates->get();
// Load all the Tag and Procedure objects related to each template
foreach($category->templates as $template)
{
$template->tags->get();
$template->procedures->get();
}
}
眼下這個代碼正在執行一個特定的頁面上超過200個查詢。
Datamapper是否有任何類型的急切加載?即:Model :: get(array('include'=> array('tags','procedures')))。或include_related方法? – Philip 2013-02-28 01:11:13
是的,以include_related的形式,但不適用於has_many's,因爲Datamapper的水合目前無法處理查詢結果中的重複。 – WanWizard 2013-03-04 17:08:48
有沒有更高效的方法來完成這個?我正在處理基本相同的情況。我加載了大約600個模型,並且希望爲每個模型包含相關模型,所以我正在循環訪問第一個模型列表,併爲每個模型運行'get()'。正在運行的查詢的數量似乎影響了我的機器上可用的內存。有沒有更有效的方法來做到這一點? – flyingL123 2014-06-18 20:43:34