给模型类添加表字段外的属性 [ 2.0 版本 ]
有时候我们需要给模型类添加一些用于存储临时信息的属性,这些属性在数据库表中是不存在的。以下是两种添加新属性的方法:
- 直接在模型类顶部添加一个类的属性
如:
private $_oldTages;
注:该方法添加的属性只能在对象实例中使用,可以不对齐进行规则设置,它不会被继承
- 重写ActiveRecord的“attributes()”方法
如:public function attributes() { return array_merge(parent::attributes(), ['authorName']); }
注:该方法添加的属性必须要配置验证规则,且能被子类继承。但需要注意重写所有的父类方法时需要优先调用父类的该方法。
也许大家会问,第二种方式看着更复杂,有什么用处呢?
最常用的就是用于index页面的表格筛选。当你在GridView小部件中某个字段的“attribute”属性使用“authorName”时,该表格列名下方会默认直接出现一个查询筛选输入框(实际展示方式会与数据列的format属性相关)。
当然如果只是为了满足这个功能,你还可以把该方法放到模型类对应的modelSearch类中,然后添加该属性的验证规则,这样一来改属性就是模型搜索类中特有的,在模型类本身无法使用。此时,如果想要在index表单上显示查询区域需要添加以下代码:
$dataProvider->sort->attributes['authorName'] = [
'asc' => ['authorName' => SORT_ASC],
'desc' => ['authorName' => SORT_DESC],
];
xiaoqijay 云南昆明
注册时间:2015-11-17
最后登录:2022-06-29
在线时长:7小时19分
最后登录:2022-06-29
在线时长:7小时19分
- 粉丝3
- 金钱440
- 威望10
- 积分610
共 2 条评论
下次发布注意 markdown 格式哦,已经帮你整理好了!
好的好的,谢谢你 我第一次发布,以后会注意的
mark,随后看