模型类MyModel具有以下行为
public function behaviors() {
return [
'CTimestampBehavior' => [
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => null,
'updateAttribute' => 'update_time',
'setUpdateOnCreate' => true
]
];
}
在代码中,我在控制器中写了这样的内容
$model = new MyModel();
$dataReader = Yii::app()->db->createCommand()
->selectDistinct('some fields')
->from('MyModel')
->leftJoin('some table')
->where('some criteria')
->query();
while ($item = $dataReader->readObject('MyMode', $model->getAttributes())) {
**//!!! HERE item array is with model attributes, which are empty**
$items[] = $item;
}
灾难,它不工作,items是数组,每个元素都包含空属性列表,就像没有从数据库中提取数据一样
如果我写
$dataReader = Yii::app()->db->createCommand()
->selectDistinct('some fields')
->from('MyModel')
->leftJoin('some table')
->where('some criteria')
->query();
while ($item = $dataReader->readObject('MyModel', MyModel::model()->getAttributes())) {
//!!! HERE item array is with model attributes, which hold correct data, taken from db
$items[] = $item;
}
它起作用了
如果我去掉CTimestamp行为,两种情况都可以。
如果我调试第一个用例,我会意识到,在pdo fetchobject完成后,它会用scenario=“current_timestamp()"调用构造函数。问题是为什么?我错过了什么?
1条答案
按热度按时间biswetbf1#
如果您阅读
readObject()
文档,您会发现第二个参数不是字段列表,而是构造函数参数列表。CActiveRecord
只有一个构造函数参数-$scenario
。$dataReader->readObject('MyMode', $model->getAttributes())
实际上将随机值指定为scenario,因为它将从$model->getAttributes()
获取第一个值。在您的情况下,您可能需要: