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
この回避策のもう一つの進化:もし私が直ちに2つの新しいオブジェクトをインスタンス化し、save()を呼び出すと、Datamapper ORMは混乱しているように見えます。ただし、データベースを調べると、2つの異なるIDが表示されます。保存は正しく行われますが、2つの新しいオブジェクトには正しく入力されません。 ** $ this-> where( "id"、$ this-> id) - > get(); ** – IhariR
私の推測では、どこかに何かがキャッシュされているということです。あなたのデータベースキャッシングクエリの結果は? – swatkins