【问题标题】:difference between ActiveRecord and model() in yii?yii 中 ActiveRecord 和 model() 的区别?
【发布时间】:2012-06-21 04:48:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 与 Yii 合作了几个月,我发现 ActiveRecord 类同时处理 ActiveRecord 和模型真的很奇怪。我只是觉得很奇怪。

标签: yii yii-cmodel yii-cactiverecord


【解决方案1】:

答案在您的文档链接中,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() 调用它们。

【讨论】:

    【解决方案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;
        }
    }
    

    如你所见,返回一个对象

    【讨论】:

    • 谢谢。简单而完整的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2011-10-26
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多