在yii中创建基本模型类

在yii中创建基本模型类,yii,Yii,在我的应用程序中,我有所有表都通用的字段,如创建日期、更新日期等。我正在使用beforeValidate回调来分配这些值。现在,这个回调对于所有型号都是相同的 为了避免代码重复,我想创建一个基本模型类 但是,当我试图创建一个基本模型时,yii抛出了一个错误,说在数据库中找不到表,这是正确的,因为我没有这个基本模型的任何表 是否有任何方法可以创建基本模型类。是否创建了基本表?考虑到Yii框架,在模型和基础模型之间建立关系可能会更容易。看看 如果这对您没有帮助,您可以自己编写一个行为类 希望这有帮助

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

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

但是,当我试图创建一个基本模型时,yii抛出了一个错误,说在数据库中找不到
,这是正确的,因为我没有这个基本模型的任何表


是否有任何方法可以创建基本模型类。

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

看看

如果这对您没有帮助,您可以自己编写一个行为类

希望这有帮助

编辑:
假设您使用的是ActiveRecords

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

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

是的,如果您使用动态DB结构,或者有其他原因使用Yii ActiveRecord,而不为DB中的每个表创建类,则可以使用

几分钟前,我将其与我的另一个扩展分离开来——AR行为,它向任何模型添加版本控制(它将insert&update上的所有数据复制到特殊表中(如果没有数据,则创建它),该表与源表+修订字段和由该字段扩展的主键具有相同的结构


请看,注释中有一个用法示例。

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

public static function model($className=__CLASS__)
{
    return parent::model($className);
}
在每个子类中,这样我就知道要为您的模型使用哪个表。否则,它将尝试使用基类作为表名


顺便说一句,如果ctimestampbehavior可以在您的案例中使用,您应该使用ctimestampbehavior,否则您当然可以使用新的基类,让我知道是否需要任何澄清。@bool.dev我使用的是activerecordok。.查看我编辑的解决方案。.它也可以工作。您还可以为每个表创建基类和特定类,然后您至少需要定义“tableName”每个特定模型类中的静态“model”方法(&M)。(或者您可以尝试使用get_class($this)检测基类中的表名)
class User extends BaseActiveRecord {

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

}