xiaoqijay 2018-06-14 17:30:36 7051次浏览 2条评论 5 2 0

有时候我们需要给模型类添加一些用于存储临时信息的属性,这些属性在数据库表中是不存在的。以下是两种添加新属性的方法:

  1. 直接在模型类顶部添加一个类的属性
    如:
    private $_oldTages;

注:该方法添加的属性只能在对象实例中使用,可以不对齐进行规则设置,它不会被继承

  1. 重写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],
];
觉得很赞
您需要登录后才可以评论。登录 | 立即注册