我使用Yii MVC
。
我必须经常在数据表中添加新列。
我想使用Gii
并重新生成model
并保留我制作的内容;常数,变量,规则,关系等变化......
所以,让我们以url
类模型为例:
<?php
/**
* This is the model class for table "url".
*
* The followings are the` available columns in table 'url':
* @property string $id
* @property integer $instance_id
* @property integer $website_id
* @property string $link
* @property string $title
* @property integer $created
* @property integer $updated
* @property integer $status
*/
class Url extends CActiveRecord {
const ACTIVE = 1;
/**
* Returns the static model of the specified AR class.
* @param string $className active record class name.
* @return Url the static model class
*/
public static function model($className = __CLASS__) {
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName() {
return 'url';
}
/**
* @return array validation rules for model attributes.
*/
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('instance_id, website_id, link, title, created, updated, status', 'required'),
array('instance_id, website_id, created, updated, status', 'numerical', 'integerOnly' => true),
array('link, title', 'length', 'max' => 255),
array('link', 'unique'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, instance_id, website_id, link, title, created, updated, status', 'safe', 'on' => 'search'),
);
}
/**
* @return array relational rules.
*/
public function relations() {
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels() {
return array(
'id' => 'ID',
'instance_id' => 'Instance',
'website_id' => 'Website',
'link' => 'Link',
'title' => 'Title',
'created' => 'Created',
'updated' => 'Updated',
'status' => 'Status',
);
}
/**
* Retrieves a list of models based on the current search/filter conditions.
* @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
*/
public function search() {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id, true);
$criteria->compare('instance_id', $this->instance_id);
$criteria->compare('website_id', $this->website_id);
$criteria->compare('link', $this->link, true);
$criteria->compare('title', $this->title, true);
$criteria->compare('created', $this->created);
$criteria->compare('updated', $this->updated);
$criteria->compare('status', $this->status);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
}
当我重新生成model
时,const
和rule
unique
将会丢失
所以,我创建了一个新的model class
,UrlM
,它扩展了url
模型类,并且这个类加强了我的所有增强功能:
<?php
class UrlM extends Url {
const ACTIVE = 1;
public function rules() {
return array(
array('link', 'unique'),
);
}
public function relations() {
return array(
);
}
}
如何将url
模型类中的规则与rules
模型类中的urlm
结合起来?
同样的答案应该适用于未来的增强功能,例如relations
答案 0 :(得分:4)
父类的每个函数 - 如rules()
,relations()
等返回数组。因此,您可以使用parent::rules()
调用,然后加入“数组”。
public function rules() {
$myParentRules=parent::rules();
$myConcatRules=$myParentRules + array(
array('link', 'unique'),
);
return $myConcatRules;
}
答案 1 :(得分:0)
array_merge会帮助你。
public function rules() {
$myRules = array(
array('id', 'numerical', 'integerOnly'=>true),
);
return array_merge(parent::rules(),$myRules);
}