使用Laravel 5.8 Maatwebsite 3.1将所选数据导出到excel

时间:2019-07-23 11:49:53

标签: laravel maatwebsite-excel

我只想将选择值导出为ex​​cel,而不导出视图刀片中表中的所有内容。我不知道如何在excel函数中编写过滤器查询。

我正在使用Maatwebsite 3.1和Laravel 5.8。我已经创建了控制器,视图刀片,导出功能和过滤条件。

控制器

    public function gameReport(Request $request)
    {

        $games = DB::table('games as g')
        ->select(
           'g.title', 
           'g.game_code',
           'g.game_name',
           'g.game_answer1',
           DB::raw('DATE(g.created_at) as created_date')
      )               
     ->orderByRaw('g.created_at DESC'); 

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

        $render=[];       
        if(isset($request->game_code))
        {
            $games=$games->where('game_code','like','%'.$request->game_code.'%');
            $render['game_code']=$request->game_code;
        }         
        $games= $games->orderBy('created_at','DESC');
        $games= $games->paginate(15);
        $games= $games->appends($render);
        $data['games'] = $games;

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

    public function exportgames() 
    {
        return Excel::download(new GamesExport, 'games.xlsx');
    } 

GameExport.php

class GamesExport implements FromQuery, WithHeadings, ShouldAutoSize, WithEvents
{

    use Exportable;
    public function query()
    {
        return BbnaijaGames::query()->select(
        DB::raw("DATE(created_at)"),
        'title',
        'game_code',
        'game_answer1'
                );
    }    

    public function headings(): array
    {
        return [
        'Date Created',
        'Title',
        'Game Code',
        'Game Answer1',
        ];
    }   

    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $cellRange = 'A1:M1'; // All headers
                $event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
            },

        ];
    }  

查看(gameReport.blade.php)

    <div class="row" style="margin-bottom: 10px">
        {{ Form::model(request(),['method'=>'get']) }}
        <div class="col-sm-4">
             {{ Form::text('game_code',null,['class'=>'form-control','placeholder'=>'Game Code']) }}
        </div>        
        <div class="col-sm-2">

        </div>          
        <div class="col-xs-2">
            {{ Form::submit('Search',['class'=>'btn btn-warning']) }}
            <a href="{{ route('gamesexport') }}" class="btn btn-primary"><i class="fa fa-file-excel-o"></i> Excel</a>
        </div>
        {{ Form::close() }}
    </div>

        @foreach($games as $key => $game)
            <tr>
                <td>{{ ++$key }}</td>
                <td>{{ $game->created_date }}</td>
                <td>{{ $game->title }}</td>
                <td>{{ $game->game_code }}</td>
                <td>{{ $game->game_answer1 }}</td>
            </tr>          
        @endforeach

我希望只能将过滤后的数据导出到excel。我在视图刀片的控制器中编写了此代码。但是我不知道如何在导出功能中做到这一点。

0 个答案:

没有答案