fields方法

使用 fields 你也可以指定哪些字段应该包含在结果内。 例如:URL http://localhost/users?fields=id,email 将只返回 id 和 email 字段。

// 返回 fields() 方法中声明的所有字段
http://localhost/users

// 只返回 fields() 方法中声明的“id”和“email”字段
http://localhost/users?fields=id,email

覆盖 fields() 方法

可覆盖 fields() 方法来增加、删除、重命名、重定义字段, fields() 的返回值应为数组,数组的键为字段名 数组的值为对应的字段定义,可为属性名或返回对应的字段值的匿名函数, 特殊情况下,如果字段名和属性名相同, 可省略数组的键,例如

// 明确列出每个字段,适用于你希望数据表或
// 模型属性修改时不导致你的字段修改(保持后端API兼容性)
public function fields()
{
    return [
        // 字段名和属性名相同
        'id',
        // 字段名为"email", 对应的属性名为"email_address"
        'email' => 'email_address',
        // 字段名为"name", 值由一个PHP回调函数定义
        'name' => function ($model) {
            return $model->first_name . ' ' . $model->last_name;
        },
    ];
}

// 过滤掉一些字段,适用于你希望继承
// 父类实现同时你想屏蔽掉一些敏感字段
public function fields()
{
    $fields = parent::fields();

    // 删除一些包含敏感信息的字段
    unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']);

    return $fields;
}