A和B两个model,A model 的relation
‘b’ => array(self::BELONGS_TO, ‘B’, ‘bid’),
代码中,$a->b取值,在某段代码中是可以取到值。某段代码取不到。现在就郁闷在为什么取不到。
我debug了a的值,bid是10,而数据库中B 确实有10的这个记录,但$a->b 是null值。查看了log,发现执行这段代码的时候没有lazy loading,是不是先前有loading了?或者哪里和他冲突了?
A和B两个model,A model 的relation
‘b’ => array(self::BELONGS_TO, ‘B’, ‘bid’),
代码中,$a->b取值,在某段代码中是可以取到值。某段代码取不到。现在就郁闷在为什么取不到。
我debug了a的值,bid是10,而数据库中B 确实有10的这个记录,但$a->b 是null值。查看了log,发现执行这段代码的时候没有lazy loading,是不是先前有loading了?或者哪里和他冲突了?
你是不是已经定义了b成员变量?
原来我就检查了会不会是这个问题,你说了后,我又检查。没有发现同名变量和字段。
$a->isNewRecord=true? 或者把完整的模型代码和出问题的代码贴出来?
我知道原因了。原来那个bid是没值,后来给它赋值了,赋值后通过relation方法调用,不起作用。
代码很长,好几百行。
我贴代码片段
$execution->hisactinst=$pHistActinst->id;
$execution->save();
CVarDumper::file('......PUtil...signal..............................................',1);
CVarDumper::file($execution,2);
CVarDumper::file($execution->pHistActinst,2);
$execution->addRelatedRecord('pHistActinst',PHistActinst::model()->findByPk($execution->hisactinst),false);
CVarDumper::file('......PUtil...signal2..............................................',1);
CVarDumper::file($execution,2);
CVarDumper::file($execution->pHistActinst,2);
做了addRelatedRecord后就有记录了。
execution是A model的原型,pHistActinst是B model的原型。
execution的relation
‘pHistActinst’ => array(self::BELONGS_TO, ‘PHistActinst’, ‘hisactinst’),
hisactinst和pHistActinst的表没有做外键关联,但在数据库里是pHistActinst的值。
这是因为第一次你读取b后,以后再读取就只从缓存的结果里读了,即便你更改了bid。你可以调用getRelated()方法来强迫更新。