所以我正在做一些单元测试和关系装置。Yii动态模型ID
我动态创建一个模型,如:
$model = CActiveRecord::model('Post');
$post = $model->findByPk(1);
但在那之后,我不能因为某些原因得到$post->id
。我将问题追溯到CActiveRecord类:
public function __get($name)
{
if(isset($this->_attributes[$name]))
return $this->_attributes[$name];
...
其中$name = "id"
。它说$this->_attributes[$name]
不存在!事实上_attributes
是空的。
我的帖子类没有定义id
(或任何其他属性)作为公共财产,我也不想这样做。我只是让AR将它映射到表格列。
我错过了什么?
编辑1
我的灯具是常规的Yii灯具 - 没有什么特别之处他们。
不同的是我真正加载它们的方式。我扩展了CDbFixtureManager,以便能够通过重载load()
方法来指定它们应该加载的顺序。的实际利率失败唯一的事情是,在有外键灯具我使用以下命令:
'comment1' => array('post_id' => $this->getRecord('Post', 'post1')->id);
这就是失败。 getRecord
返回实际的Post记录(因为我知道Post fixture已经成功加载并存在于数据库中),但是在->id
部分,我得到关于该属性不存在的例外。
如果我进入Post
模型并将public $id;
添加到它,那么一切正常!但我不确定这是否是好的做法,去宣布所有属性公开那样。
你可以发布你的灯具文件以及你的测试吗?很难说这是怎么回事... – acorncom
@acomcom,我在说明中加了编辑1。 –