在yii中创建基本模型类

时间:2012-02-21 10:32:03

标签: yii

在我的应用程序中,我有所有表共有的字段,例如创建日期,更新日期等。要分配这些值,我正在使用beforeValidate回调。现在,这个callback对于所有模型都是相同的。

为避免代码重复,我想创建一个基本模型类。

但是,当我尝试创建一个基本模型时,yii抛出错误说table cannot be found in database,这是真的,因为我没有这个基本模型的任何表。

我有什么方法可以创建基础模型类。

4 个答案:

答案 0 :(得分:2)

是的,如果你使用动态数据库结构或有其他理由使用Yii ActiveRecord而不为数据库中的每个表创建类,你可以使用smartActiveRecord yii extension

我将其与我的其他扩展程序分开了几分钟 - 将任何模型添加版本的AR行为(它将插入和更新的所有数据复制到特殊表(如果不存在则创建它),具有相同的结构作为源表+“修订字段”和由该字段扩展的主键。

查看SmartAR.php source,评论中有使用示例。

答案 1 :(得分:1)

看看CTimeStampBehavior

对你没有帮助,你可以自己写一个行为课程。

希望这有帮助。

编辑:假设您使用的是ActiveRecords。

如果要创建新的基本模型,可以执行以下操作:

abstract class MyBaseARClass extends CActiveRecord{
    protected function beforeValidate(){
            if(parent::beforeValidate()){
                    // assign your fields
                    return true;
            }
            else return false;
    }
}

答案 2 :(得分:0)

您是否创建了基表?考虑Yii框架,在模型和基础模型之间建立关系可能更容易。

答案 3 :(得分:0)

在您的情况下,您需要覆盖

public static function model($className=__CLASS__)
{
    return parent::model($className);
}

在每个子类中,所以Yii会知道哪个表用于您的模型。否则,它将尝试使用基类作为表名。

即。

class User extends BaseActiveRecord {

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

}