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();

这样获取的数据包含了该表的所有字段,但是我只需要其中的idnameurl,不想enablecreate_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中,然后获取到的结果中还是包含了全部字段。
请问该怎么使用呢?

阅读 10.8k
5 个回答
$files = File::find()->select(['id', 'url', 'name'])->where(['enable' => '1'])->orderBy('id DESC')->all();
新手上路,请多包涵

请问 这个问题 你解决了吗

新手上路,请多包涵
        $start_time = microtime(true);

        $data['data'] = Goods::find()->select(['id','title','desc','cate_id'])->with('comments','cate')->all();


        foreach ($data['data'] as $i => $goods) {

            $comments = $goods->getComments()->all();
            $cate = $goods->cate;
//            $model = $goods->attributes; //不行

            $data['data'][$i] = $goods; //可以
            $data['data'][$i]['cate'] = $cate;
            $data['data'][$i]['comments'] = $comments;
            
//
        }

        $data['errorCode'] = 0;


        $end_time = microtime(true);
        $data['cost'] = sprintf('%.4f', ($end_time - $start_time)) . ' s';

        echo Json::encode($data);

select 其实是可以的,但是 我想找到更简便的方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进