7

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

我试图登录is_object(CActiveRecord::model('Project'));并期待false但它返回了true

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

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

4

2 回答 2

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

编辑:

论坛中的这篇文章还说:(类级别和静态方法之间的区别)

类级方法实际上是静态方法,但具有能够使用继承的好处。也就是说,您可以在子类中覆盖类级别方法的操作,而如果您使用静态方法,您将无法覆盖它。.... 所以,一般来说,你应该使用类级别的方法,而不是静态方法,因为它给你带来了继承的好处,尽管它可能感觉有点奇怪。然后使用 $class::model()->method() 调用它们。

于 2012-06-21T05:05:46.960 回答
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;
    }
}

如您所见,返回一个对象

于 2012-06-21T05:05:13.733 回答