relation值为空,大概是什么方面问题?

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()方法来强迫更新。