Laravelを学び始めた初心者です。
お店の検索機能の実装にチャレンジしています。
検索欄にお店の名前の一部を入力し、DBから一致するデータを取得してビューに表示したいのですがデータの取得の所で躓いております。
解決策をご教授いただきたいです。よろしくお願いします。
<開発環境>
OS mac10.15.4
php 7.4.5
Laravel 7.12.0
<実現したい事>
shop/showShop/{id}の検索フォームでキーワードを入力
↓
検索結果をshop/searchShopで表示
<起きている事>
検索キーワードを入力してフォームを送信するが、検索結果が表示されない。
(キーワードはヒットする単語を入力しています。)
エラーは発生しておりません。
お店の名前はshopname, エリアはaddress、がそれぞれカラム名です。
下記コード(ShopController.php)の(*)のddの結果
Illuminate\Pagination\LengthAwarePaginator {#1468 ▼ #total: 0 #lastPage: 1 #items: Illuminate\Database\Eloquent\Collection {#1431 ▼ #items: [] } #perPage: 5 #currentPage: 1 #path: "http://127.0.0.1:8000/shop/searchShop" #query: [] #fragment: null #pageName: "page" +onEachSide: 3 #options: array:2 [▼ "path" => "http://127.0.0.1:8000/shop/searchShop" "pageName" => "page" ] }
以下が該当のコードです。
showShop.blade.php
@extends('layouts.app') @section('content') // <h3>ショップ検索</h3> <form action="{{ route('searchShop') }}" method="get"> @csrf <input type="hidden" name="id" value="{{ $shop['id'] }}"> <label>ショップ名から探す</label> <input type="text" name="shopname"> <label>エリアから探す</label> <select type="text" name="address"> <option value="" selected>指定無し</option> <option value="北海道">北海道</option> <option value="東北">東北地方</option> <option value="関東">関東地方</option> <option value="中部">中部地方</option> <option value="近畿">近畿地方</option> <option value="中国">中国地方</option> <option value="四国">四国地方</option> <option value="九州">九州地方</option> </select> <button type="submit" class="btn btn-primary">検索する</button> </form> @endsection
searchShop.blade.php
@extends('layouts.app') @section('content') <h3>検索結果</h3> @foreach($data as $val) <p>{{ $val->shopname }}</p> @endforeach @endsection
ShopController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Shop; use App\Diary; class ShopController extends Controller { // public function showShop($id) { $shop = Shop::find($id); return view('shop.showShop', ['shop' => $shop]); } public function searchShop(Request $request) { $query = Shop::query(); //$request->input()で検索時に入力した項目を取得 $search1 = $request->input('shopname'); $search2 = $request->input('address'); //入力フォームで入力した文字列を含むカラムを取得 if($request->has('shopname') && $search1 != ''){ $query->where('shopname', 'like', '%' . $search1 . '%')->get(); } //プルダウンメニューで指定なし以外を選択した場合、$query->whereで選択したエリアと一致するカラムを取得 if($request->has('address') && $search2 != ('指定無し')){ $query->where('address', $search2)->get(); } //検索結果を5件ずつ表示 $data = $query->paginate(5); //dd($data); //(*) return view('shop.searchShop', ['data' => $data]); } }
web.php
Route::get('shop/showShop/{id}', 'ShopController@showShop')->name('showShop'); Route::get('shop/searchShop', 'ShopController@searchShop')->name('searchShop');
何か足りない情報あれば教えてください。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/30 13:16