Yii2 ActiveRecord 数据库字段过滤问题


有一个 Yii2 关于ActiveRecord的一个问题,比如数据库中 files 表有 uid , name , url , filetype , create_time , enable 等字段,我在 models 建立了这个表对应的model:


 <?php
namespace common\models;

use Yii;
use yii\db\ActiveRecord;

/**
* 文件
*/
class File extends ActiveRecord
{
    public static function tableName()
    {
        return '{{%files}}';
    }

}

现在我通过如下方法获取数据:


 $files = File::find()->where(['enable' => '1'])->orderBy('id DESC')->all();

这样获取的数据包含了该表的所有字段,但是我只需要其中的 id name url ,不想 enable create_time 等字段也被获取出来。
我查到了 ActiveRecord 中有两个函数 fields , extraFields :


 public function fields()
{
    $fields = parent::fields();
    // 去掉一些包含敏感信息的字段
    unset($fields['enable'], $fields['create_time']);
    return $fields;
}

public function extraFields()
{
    return [
        'fileType' => function (){
            return Yii::$app->params['file_file_type'][$this->filetype];
        }
    ];
}

我把这两个函数加到 File.php 中,然后获取到的结果中还是包含了全部字段。
请问该怎么使用呢?

active-record yii2

沉默的乌鸦 9 years ago

Your Answer