首页 > 解决方案 > 使用 laravel-excel 导出时如何显示列的特殊字符串?

问题描述

我正在使用 laravel excel 从“用户”表中导出数据。需要运行查询,并且将返回与查询匹配的所有记录。

我的代码就像

class UsersExport implements FromQuery
{
    use Exportable;

    public function __construct(string $code)
    {
        $this->code = $code;
    }

    public function query()
    {
        return Tantousya::query()->where('code','>=',$this->code); 
    }
}

它运行良好,并为我提供了正确的数据。

但是,在用户表中有一个“密码”列。客户希望我显示像“*****”这样的字符串,而不是显示加密的密码。如果未设置密码,则显示“”(空白字符串)。

为了更好地说明它,我当前的输出是这样的, 在此处输入图像描述

我想要的输出就像, 在此处输入图像描述

如何更改查询功能以获得所需的输出?

标签: laravelmaatwebsite-excel

解决方案


我认为你应该尝试这样的事情:

public function query()
{
    return Tantousya::query()->select(['*', \DB::raw("'***' as password")])->where('code','>=',$this->code); 
}

第二种方法是实现FromCollection然后使用map方法更改值。

像这样的东西:

use Maatwebsite\Excel\Concerns\FromCollection;

class UserExport implements FromCollection {

    public function collection()
    {
        return User::select(['*'])
            ->get()
            ->map(function($item) {
                $collection = $item;
                $collection['password'] = '***';
                return $collection;
            });
    }
}

推荐阅读