Laravel - 传递给 App\Exports\UserresponseExport::__construct() 的参数 1 必须是字符串类型

Laravel - Argument 1 passed to App\Exports\UserresponseExport::__construct() must be of the type string

我正在使用 Laravel 5.8 和 Maatwebsites 3.1 从视图 blade 导出到 excel。这很完美。我遇到的问题是我只想导出过滤后的数据,而不是 table 中的所有内容。请参阅下面的控制器:

控制器

    public function userresponseReport(Request $request,$export=false)
{        
    $userresponses = DB::table('user_response as g')
    ->select(
       //DB::raw('DATE(g.created_at) as created_date'),
       DB::raw('g.created_at as created_date'),
       'g.msisdn', 
       'g.game_code', 
       'g.answer',
       'g.answer_code'
       'g.user_channel'                
  )               
 ->orderByRaw('g.created_at DESC'); 

    $start_date = $request->start_date;
    $end_date = $request->end_date; 

    $render=[];  
    if(isset($request->start_date) && isset($request->end_date))
    {
        $userresponses=$userresponses->whereBetween('created_at',[$start_date.' 00:00:00',$end_date.' 23:59:59']);
        $render['start_date']=$request->start_date;
        $render['end_date']=$request->end_date;
    }elseif(isset($request->start_date))
    {
        $userresponses=$userresponses->where('created_at',$request->start_date);
        $render['start_date']=$request->start_date;
    }        
    if(isset($request->msisdn))
    {
        $userresponses=$userresponses->where('msisdn','like','%'.$request->msisdn.'%');
        $render['msisdn']=$request->msisdn;
    }
    if(isset($request->game_code))
    {
        $userresponses=$userresponses->where('game_code','like','%'.$request->game_code.'%');
        $render['game_code']=$request->game_code;
    }   
    if(isset($request->user_channel))
    {
        $userresponses=$userresponses->where('user_channel','like','%'.$request->user_channel.'%');
        $render['user_channel']=$request->user_channel;
    }  
    if(!empty($export))
    {

        return Excel::download(new UserresponseExport($request->msisdn, $request->game_code,$request->user_channel,$request->start_date,$request->end_date), 'userresponse.xlsx');
    }        
    $userresponses= $userresponses->orderBy('created_at','DESC');
    $userresponses= $userresponses->paginate(15);
    $userresponses= $userresponses->appends($render);
    $data['userresponses'] = $userresponses;

return view('report.userresponseReport',$data);        
}

导出函数

class UserresponseExport implements FromQuery, WithHeadings, ShouldAutoSize, WithEvents

{

public function query()
{
    return UserResponse::query()->select(
    DB::raw("DATE(created_at)"),
    'msisdn',
    'game_code',
    'answer',
    'user_channel'
            );
}    

public function headings(): array
{
    return [
    'Date Created',
    'MSISDN',
    'game_code',
    'Answer',
    'Channel'
    ];
} 

public function __construct(string $msisdn, string $game_code, string $user_channel, string $start_date, string $end_date){
    $this->msisdn = $msisdn;
    $this->game_code = $game_code;
    $this->user_channel = $user_channel;
    $this->start_date = $start_date;
    $this->end_date = $end_date;
}    

查看blade

        {{ Form::model(request(),['method'=>'get']) }}
    <div class="col-sm-2">
         {{ Form::text('msisdn',null,['class'=>'form-control','placeholder'=>'MSISDN']) }}
    </div>
    <div class="col-sm-2">
         {{ Form::text('game_code',null,['class'=>'form-control','placeholder'=>'Game Code']) }}
    </div>   
    <div class="col-sm-2">
         {{ Form::text('user_channel',null,['class'=>'form-control','placeholder'=>'Channel']) }}
    </div>          
    <div class="col-sm-2">
        {{ Form::date('start_date',null,['class'=>'form-control','placeholder'=>'Date']) }}
    </div>
    <div class="col-sm-2">
        {{ Form::date('end_date',null,['class'=>'form-control','placeholder'=>'Date']) }}
    </div>          
    <div class="col-xs-2">
        {{ Form::submit('Search',['class'=>'btn btn-warning']) }}
        <a href="{{ route('userresponseReport',['export']) }}" class="btn btn-primary"><i class="fa fa-file-excel-o"></i> Excel</a>
    </div>
    {{ Form::close() }}

当我试图只导出过滤后的数据时,出现了这个错误

Argument 1 passed to App\Exports\UserresponseExport::__construct() must be of the type string, null given, called in C:\xampp\htdocs\bbnaijareport\app\Http\Controllers\ReportController.php on line 198

这是第 198 行:

return Excel::download(new UserresponseExport($request->msisdn, $request->game_code,$request->user_channel,$request->start_date,$request->end_date), 'userresponse.xlsx');

如何解决此错误?或者有没有其他更好的方法。

更改您的控制器以自动将 null 转换为空字符串

return Excel::download(new UserresponseExport($request->msisdn ?? '', ...