在我的应用程序中,我有所有表共有的字段,例如创建日期,更新日期等。要分配这些值,我正在使用beforeValidate
回调。现在,这个callback
对于所有模型都是相同的。
为避免代码重复,我想创建一个基本模型类。
但是,当我尝试创建一个基本模型时,yii抛出错误说table cannot be found in database
,这是真的,因为我没有这个基本模型的任何表。
我有什么方法可以创建基础模型类。
答案 0 :(得分:2)
是的,如果你使用动态数据库结构或有其他理由使用Yii ActiveRecord而不为数据库中的每个表创建类,你可以使用smartActiveRecord yii extension
我将其与我的其他扩展程序分开了几分钟 - 将任何模型添加版本的AR行为(它将插入和更新的所有数据复制到特殊表(如果不存在则创建它),具有相同的结构作为源表+“修订字段”和由该字段扩展的主键。
查看SmartAR.php source,评论中有使用示例。
答案 1 :(得分:1)
对你没有帮助,你可以自己写一个行为课程。
希望这有帮助。
编辑:假设您使用的是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);
}
}