以前の記事「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
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」に出力されます。
※流用される場合は自己責任でお願いします。