在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);
}
}