YII中ActiveRecord和模型之间的关系或区别是什么?
我正在尝试记录is_object(CActiveRecord::model('Project'));
并期待false
,但它返回了true
;
由于日志记录表明它是一个对象,我认为它代表了表中的一行,但我找不到任何代表coloumns的属性。
同样http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail表示它正在返回CActiveRecord
类的实例,但我找不到该对象中表行的任何值。
答案 0 :(得分:8)
答案在您的文档链接中,model()
是一个类级方法,它是:
返回指定AR类的静态模型。返回的模型是AR类的静态实例。它用于调用类级方法(类似于静态类方法。)
假设您这样做:$model=CActiveRecord::model('Project');
,然后使用$model
,您可以调用CActiveRecord的所有类级别方法,例如:
$allModels = $model->findAll(); // will give you all the models of Project
$someModel = $model->findByPk('pkValue'); // will give you the row with primary key value = pkValue
$model->deleteAll(); // will delete all the records of Project
// and so on
编辑:
论坛中的this post也说:(班级与静态方法的区别)
类级别方法是有效的静态方法,但能够使用继承。也就是说,您可以在子类中覆盖类级别方法的操作,而如果您使用静态方法,则无法覆盖它。 .... 所以,一般来说,你应该使用类级方法,而不是静态方法,因为它给你带来了继承的好处,虽然它可能感觉有点奇怪。然后使用$ class :: model() - > method()调用它们。
答案 1 :(得分:2)
ActiveRecord是一种模式。用于在关系数据库中存储数据的模式。 MVC模式中的模型是数据的一部分。因此,Yii是一个为模型实现ActiveRecord的MVC框架。
模型方法就是这个
public static function model($className=__CLASS__)
{
if(isset(self::$_models[$className]))
return self::$_models[$className];
else
{
$model=self::$_models[$className]=new $className(null);
$model->_md=new CActiveRecordMetaData($model);
$model->attachBehaviors($model->behaviors());
return $model;
}
}
如您所见,返回一个对象