0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

laravel5.8 検索機能

Last updated at Posted at 2021-07-13

laravelの検索機能を作成したのでアウトプットしていこうと思います。

#画面
商品名:あいまい検索
商品カテゴリー:プルダウン検索
スクリーンショット 2021-07-11 22.37.46.png

入力保持:検索した値が残る
スクリーンショット 2021-07-11 22.38.19.png

#実装
###▪️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');
    });
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?