所以我正在研究一些单元测试和关系固定装置。
我正在动态创建一个模型,例如:
$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
是空的。
我的 Post 类没有将id
(或任何其他属性)定义为公共属性,我也不想这样做。我只是让 AR 为我将其映射到表格列。
我错过了什么?
编辑 1
我的灯具是常规的 Yii 灯具——它们并没有什么特别之处。
不同的是我真正加载它们的方式。我扩展了 CDbFixtureManager 以便能够指定通过重载load()
方法加载它们的顺序。唯一真正失败的是,在具有外键的装置中,我使用以下内容:
'comment1' => array('post_id' => $this->getRecord('Post', 'post1')->id);
那就是它失败的地方。getRecord
返回实际的 Post 记录(因为我知道 Post 夹具已经成功加载并存在于 DB 中),但在->id
部分我得到一个关于该属性不存在的异常。
如果我进入Post
模型并添加public $id;
它,那么一切正常!但我不确定像这样宣布所有财产是否是一种好习惯。