在yii中ActiveRecord和model()之间的区别?

时间:2012-06-21 04:48:06

标签: yii yii-cmodel yii-cactiverecord

YII中ActiveRecord和模型之间的关系或区别是什么?

我正在尝试记录is_object(CActiveRecord::model('Project'));并期待false,但它返回了true;

由于日志记录表明它是一个对象,我认为它代表了表中的一行,但我找不到任何代表coloumns的属性。

同样http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail表示它正在返回CActiveRecord类的实例,但我找不到该对象中表行的任何值。

2 个答案:

答案 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;
    }
}

如您所见,返回一个对象