laravel5.8 검색 기능

laravel의 검색 기능을 작성했으므로 출력해 가려고 생각합니다.

화면



상품명 : 모호한 검색
제품 카테고리 : 풀다운 검색


입력 유지 : 검색된 값이 남습니다.


구현



▪️View



views/product/search.blade.php
 <form class="search" enctype="multipart/form-data" action="{{route('product.index')}}" accept-charset="UTF-8" method="get">
        @csrf
        <div class="row">
            <div class="input-group mt-4 col-md-7 offset-2">
                <h2 class="mr-4">商品名</h2>
                <input type="text" name="product_name" class="form-control" value="{{isset($product_name) ? $product_name : "" }}"> 
                <span class="input-group-btn">
                    <input type="submit" class="btn btn-primary ml-4" value="検索">
                </span>
            </div>
        </div>

        <div class="row">
            <div class="input-group mt-4 col-md-7 offset-2">
                <h2>商品カテゴリ</h2>
                <select id="category_id" name="category_id" class="form-control">
                    @foreach(config('categories') as $id => $category)
                    <option name="category_id" value="{{$id}}" @if ($id === $category_id_int) {{$id}} selected @endif>{{$category}}</option>
                    @endforeach
                </select>
            </div>
        </div>
    </form>

@foreach (config('categories') as $id => $category)
선택 상자의 값은 config/categories.php에 배열을 가져옵니다.

입력 유지
· 텍스트 상자
value="{{isset($product_name) ? $product_name : ""}}"

・셀렉트 박스
value="{{$id}}"@if ($id === $category_id_int) {{$id}} selected @endif >

왠지 old 함수를 사용할 수 없었기 때문에 이번 방법으로 입력 유지했습니다.
이것이 정답인지 확실하지 않지만 도움이 될 수 있다고 생각합니다.

이미지로서는
값을 컨트롤러에 보내고 보낸 값을 다시 표시시키고 있는 이미지입니다.

routes/web.php
<?php
return array(
    '0'=>'未選択',
    '1'=>'肉類',
    '2'=>'魚介類',
    '3'=>'果物類',
    '4'=>'野菜類',
    '5'=>'飲み物類',
    '6'=>'漬物類',
    '7'=>'菓子類',
);

▪️Controller



Controller/ProductsController.php

    /**
     * 商品検索
     * @return $datas
     */
    public function index(Request $request)
    {
        $query = Product::query();

        $product_name = $request->product_name;
        $category_id = $request->category_id;

        //商品名の値が存在&商品名の値が空ではなかった場合
        if ($request->has('product_name') && $product_name !== '') {
            $query->where('product_name', 'like', '%' . $product_name . '%')->get();
        }

        //カテゴリーの値が存在&カテゴリーの値が0ではなかった場合
        if ($request->has('category_id') && $category_id !== '0') {
            $query->where('category_id', $category_id)->get();
        }

        $datas = $query->paginate(15);

        //型変換
        $category_id_int = intval($category_id);

        return view('product.search', ['datas' => $datas, 'product_name' => $product_name, 'category_id_int' => $category_id_int]);
    }


▪️route



routes/web.php
Route::prefix('products')->group(function () {
        Route::get('/', 'ProductsController@index')->name('product.index');
    });

좋은 웹페이지 즐겨찾기