質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2485閲覧

[Laravel]Undefined variable $xxxについて

web.1225

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/17 01:30

Laravel初心者です。
社員管理システムを作成しています。
現在、一覧画面から社員検索機能を実装しているのですが
検索ボタンを押下した際、
「Undefined variable $employees」というエラーが発生しています。

発生している問題・エラーメッセージ

Undefined variable $employees (View: /work/backend/resources/views/employee/index.blade.php)

該当のソースコード

//index.blade.php //検索処理 <form action="{{ route('employee.search') }}" method="post" style="display: inline-block;"> @csrf <input class="keyword" type="text" placeholder="キーワード" name="search"> <button id=searchButton type="submit">検索</button> </form> //検索処理終了 <select name="employeeSort" id="sort"> <option>@sortablelink('empNumber', '社員番号')</option> <option>@sortablelink('id', '社員ID')</option> <option>@sortablelink('lastName', '社員姓')</option> </select> <input id="toggle" class="toggle-input" type='checkbox' name="deleteEmployee" method="POST"/> <label for="toggle" class="toggle-label"></label> <button id=button type="submit">CSV出力</button> <form action="{{ route('employee.create')}}" method="PUT" style="display: inline-block;"> @csrf @method('PUT') <button id=button type="submit">新規登録</button> </form> </div> <table class="empTable"> <tr> <th>社員番号</th> <th>社員ID</th> <th>社員姓</th> <th>社員名</th> </tr> @if(isset($_POST['deleteEmployee'])) <div class="deleteEmployee"> <tr> @foreach ($employees as $employee) <td>aaa</td> <td>{{ $employee->id }}</td> <td>{{ $employee->lastName }}</td> <td>{{ $employee->firstName }}</td> @endforeach </tr> </div> @endif <tr> //ここでエラー @foreach ($employees as $employee) <td><a href="{{ route('employee.edit', $employee->id)}}">{{ $employee->empNumber }}</a></td> <td>{{ $employee->id }}</td> <td>{{ $employee->lastName }}</td> <td>{{ $employee->firstName }}</td> <th> <form action="{{ route('employee.destroy', $employee->empNumber)}}" method="POST" onsubmit="return deleteItem()"> @csrf @method('DELETE') <input type="submit" name="" value="削除" class="deleteButton"> </form> </th> </tr> @endforeach </table>
// web.php Route::post('/employee/search', 'App\Http\Controllers\EmployeeController@search')->name('employee.search');
// EmployeeController.php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Models\Employee; use Illuminate\Http\Request; class EmployeeController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { // $employees = Employee::paginate(20); return view('employee.index', compact('employees')); }   //検索処理 public function search(Request $request) { $search = $request->input('search'); if ($request->filled('search')) { //検索キーワードが一致するレコードを絞り込む $query=Employee::where('empNumber', 'like', "%{$request->search}%")->orWhere('id', 'like', "%{$request->search}%") ->orWhere('lastName', 'like', "%{$request->search}%")->orWhere('firstName', 'like', "%{$request->search}%"); } return view('employee.index', ['search' => $search]); }

試したこと

index.blade.phpのエラー部分を@if(isset($employees))と@endifで囲む

@if(isset($_POST['deleteEmployee'])) <div class="deleteEmployee"> <tr> @foreach ($employees as $employee) <td>aaa</td> <td>{{ $employee->id }}</td> <td>{{ $employee->lastName }}</td> <td>{{ $employee->firstName }}</td> @endforeach </tr> </div> @endif <tr> @if(isset($employees)) @foreach ($employees as $employee) <td><a href="{{ route('employee.edit', $employee->id)}}">{{ $employee->empNumber }}</a></td> <td>{{ $employee->id }}</td> <td>{{ $employee->lastName }}</td> <td>{{ $employee->firstName }}</td> <th> <form action="{{ route('employee.destroy', $employee->empNumber)}}" method="POST" onsubmit="return deleteItem()"> @csrf @method('DELETE') <input type="submit" name="" value="削除" class="deleteButton"> </form> </th> </tr> @endforeach @endif

ネットで調べたところ、issetで囲むとあったので試しましたが、エラー内容は変わりません。
書き方等問題ある部分ございましたら教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

public function search(Request $request) { $search = $request->input('search'); $employees = Employee::query() ->when($search, function ($q) use ($search) { $q->where('empNumber', 'like', "%{$search}%") ->orWhere('id', 'like', "%{$search}%") ->orWhere('lastName', 'like', "%{$search}%") ->orWhere('firstName', 'like', "%{$search}%"); })->get(); return view('employee.index', compact('search', 'employees')); }

投稿2021/10/17 05:53

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

web.1225

2021/10/20 01:01

返信遅れました。 ご回答いただきありがとうございます。 無事クエリも通り、検索機能が実装できました。 ありがとうございました。
guest

0

public function search(Request $request) { において

return view('employee.index', ['search' => $search]);
としていますので、変数 $employees が渡っていません。

issetを使って表示しないようにするのであれば、Viewの上半分にも$employeesが利用されているのでこちらにも同様の処理が必要です。

投稿2021/10/17 01:40

Eggpan

総合スコア3205

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

web.1225

2021/10/17 02:46

ご回答いただきありがとうございます。 issetで``$employees``部分を囲みましたが同様のエラーが出てしまいました。 また、変数``search``を``$employees``に合わせてみましたが、 ``` count(): Argument #1 ($value) must be of type Countable|array, null given ``` 件数表示の処理の部分で上記のエラーが出てしまいました。 isset以外の解決方法等ありましたらご教授いただきたいです。
Eggpan

2021/10/17 03:30 編集

viewを分けた方がいいんじゃないですかね? ごく初歩的なところで躓いているように見受けられます。 ``` count(): Argument #1 ($value) must be of type Countable|array, null given ``` については現状のコードが分かりませんので回答できません。
web.1225

2021/10/20 01:23

すみません、返信遅れました。 ご回答頂きありがとうございます。 viewがとっ散らかっているのもうまく実装できていない原因かと思いますので viewを分けることも検討しながら機能実装に努めたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問