只是想知道如果有一個簡單的方法來自動填充對象的相關領域上的一個實例,通過實例爲基礎,而不是在全球範圍內配置文件,或者對整個班級。笨 - DataMapper的ORM - 自動填充實例
我想包括一個單實例的所有相關模型,而不鏈一噸include_related()
功能。 這樣的事情將是很好:
$x = new Model();
$x->include_all_related();
只是想知道如果有一個簡單的方法來自動填充對象的相關領域上的一個實例,通過實例爲基礎,而不是在全球範圍內配置文件,或者對整個班級。笨 - DataMapper的ORM - 自動填充實例
我想包括一個單實例的所有相關模型,而不鏈一噸include_related()
功能。 這樣的事情將是很好:
$x = new Model();
$x->include_all_related();
想過我必須讓我的手在覈心臟。無論出於何種原因,我都沒有想到我可以訪問$has_many
和$has_one
陣列。
解決方案很簡單:
class Model extends Datamapper{
var $has_one = array('foo', 'bar', 'baz');
var $table = 'models';
function __construct($id = NULL){
parent::__construct($id);
}
function include_all_related(){
foreach($this->has_one as $h){
$this->include_related($h['class']);
}
return $this;
}
}
你可能想知道爲什麼我使用的$h
變量class
關鍵。在底層,Datamapper ORM跟蹤其他一些鍵也是更大陣列的一部分。如果您致電print_r($h)
,您可以看到它們。該class
重點跟蹤的foo
,bar
和baz
。
您可以啓用它的關係定義,如果你想要的是在特定情況下,您需要更改該實例的關係配置在運行時。
我不認爲的DataMapper有任何內置的功能。你可以在模型中添加'include_all_related()'函數來簡單地保存一遍又一遍地編寫代碼? – froddd
感謝@froddd - 是啊,這就是我現在採用的方法 - 但它意味着,當我創建一個新的模型,並填寫它的關係('$的has_many()'和'$ HAS_ONE()'),我也有進入'include_all_related()'函數並在那裏進行調整。我在[DMORM CI論壇]上也提過它(http://ellislab.com/forums/viewthread/205637/P825)。我們的解決方案是一個臨時解決方案,當我不那麼忙時,如果我沒有得到答案,我會深入研究核心並自己創建一個方法:D –
實際上,我不必更改'include_all_related()'函數,如果我只是在'$ has_one'或'$ has_many'數組中讀取數據。 _facepalm_。見下面的解決方案 –