以前の記事「Laravel6でmaatwebsite/excelインストールとエクセル出力方法」ではusersテーブルのデータをそのままgetでエクスポートし、エクセルに出力しましたが今回usersテーブルの検索結果(postデータ)をエクセルで出力する方法をご紹介します。
(Laravelバージョンは6.18.39)
検索を行うusersテーブルを用意
以下のusersテーブルを用意しました。usersテーブルよりname(ユーザー名)カラム内のデータをlike検索します。
usersテーブル
名前 | 説明 |
---|---|
id | 主キー |
name | ユーザー名 |
メールアドレス |
usersテーブルの内容を全てveiwに出力するclassを作成
usersテーブルの検索結果をveiw(exports/excelusers.blade.php)に出力する以下のclass(/app/Exports/Excelusers.phpファイル)を作成します。
<?php <?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromView; use Illuminate\Contracts\View\View; class Excelusers implements FromView { protected $users; function __construct($users) { $this->users = $users; } public function view(): View { //下記追加 「excel.xxxxx」の部分はviewまでのrootを記載 return view('exports.excelusers', [ 'users' => $this->users, ]); } } ?>
エクセルファイル出力内容のview(/exports/excelusers.blade.phpファイル)の記述
エクセルファイルに出力する内容のview(/resources/views/exports/excelusers.blade.phpファイル)の記述は以下の通りです。「name」と「email」をエクセルに出力します。
<p>userテーブル</p> <table> <thead> <tr> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> @foreach($users as $user) <tr> <td>{{ $user->name }}</td> <td>{{ $user->email }}</td> </tr> @endforeach </tbody> </table>
エクセルファイル(users.xlsx)を出力するControllerの記述
usersテーブルのname(ユーザー名)カラム検索結果をエクセルファイル(users.xlsx)に出力するController(/app/Http/Controllers/ExcelusersController.phpファイル)の記述は以下の通りです。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; use App\Exports\Excelusers; use Maatwebsite\Excel\Facades\Excel; class ExcelusersController extends Controller { //検索結果エクセル出力 public function excelresult(Request $request) { $sql = '1=1'; $username = ""; if(!empty($request->username)){ $username = $request->username; $sql .= " AND users.name like '%".$username."%'"; //usersテーブルのnameカラムをlike検索 } $users = DB::select("SELECT * FROM users WHERE ".$sql." ORDER BY id DESC"); return Excel::download(new Excelusers($users), 'users.xlsx'); } }
エクセル出力URL(/routes/web.php)の記述
エクセル(users.xlsx)出力URL(post)を/routes/web.phpに記述します。
<?php Route::post('/excelusers', 'ExcelusersController@excelresult'); ?>
検索入力画面のview(serchuser.blade.phpファイル)の記述
usersテーブルのnameカラムを検索する入力画面のview(/resources/views/serchuser.blade.phpファイル)の記述は以下の通りです。
(検索入力画面のmodel(class)、Controller、web.phpの記述は省略します)
<form enctype="multipart/form-data" action="{{ url('excelusers') }}" method="POST" class="form-horizontal"> @csrf <div>エクセルで出力したいusersテーブルに登録されている名前を入力して下さい</div> <input type="text" name="username" value=""> <div> <button type="submit" class="btn btn-primary"> 検索結果出力 </button> </div> </form>
※web.phpに記述した「/usersexport」に入力画面のデータをpostするとusersテーブルnameカラムの検索結果が「users.xlsx」に出力されます。
※流用される場合は自己責任でお願いします。