我正在使用Datamapper ORM 1.8.2.1和CodeIgniter 2.1.0,並且無法從父項中訪問新添加的相關對象。如何訪問Datamapper中新保存的相關對象ORM
我有這樣的父類:
class Virement extends DataMapper
{
var $has_many = array("lignevirement");
// ...
}
和子類是這樣的:
class LigneVirement extends DataMapper
{
var $has_one = array("virement");
// ...
}
在用戶代碼中,我實例化這個家長,並添加一些子對象:
$vrt = new Virement; // and do some inits on properties.
$vrt->save();
$lili = new LigneVirement; // do some inits also on properties.
$lili->save();
$vrt->save($lili);
$lili = new LigneVirement; // do some inits also on properties.
$lili->save();
$vrt->save($lili);
// ...
當我在添加子對象後立即計數,我得到0:
echo $vrt->lignevirement->count();
...而採取的數據庫表一看顯示,父記錄已添加,所有子記錄已被添加,他們是正確相關與父記錄。
順便說一句,當我再嘗試這種解決方法,我得到了正確數量的子行:
$vrt = new Virement($vrt->id);
那麼,什麼可能是錯誤上面我的代碼?
碰巧爲了業務規則強制原因,我重寫了save()方法。不知道這是否與問題有關,解決方法如下所示:public function save($ prmObject =「」,$ prmRelatedField =「」){... $ this-> get(); }。 get()似乎強制重新加載對象樹並使子對象可用。 – IhariR 2012-03-21 20:30:33
這個解決方法的另一個演變:如果我立即一個接一個地實例化兩個新對象並在其上調用save(),Datamapper ORM似乎會感到困惑,併爲兩者恢復同一個id。但是,當您查看數據庫時,您會看到兩個不同的ID,即保存已正確完成,但兩個新對象未正確填充。爲了解決這個問題,先前的get()代碼變爲:** $ this-> where(「id」,$ this-> id) - > get(); ** – IhariR 2012-03-31 20:40:14
我的猜測是某事被緩存在某處 - 你的數據庫緩存查詢結果? – swatkins 2012-06-26 14:18:01