【市場価値がわかる】エンジニア転職におすすめなサイト

【Laravel】選択したセレクトボックスの値でソートして画面を切り替える

選択したセレクトボックスの値で画面をソートさせたいなぁ…

こんな疑問を解決します。

解説する内容としては、

①セレクトボックスを選択する
②選択したセレクトボックスが例えば価格が低い順なら、価格が低い順にソートさせ、価格が高い順を選べば、価格が高い順にデータをソートさせる
③画面の表示

結論、セレクトボックス変更時にフォームをsubmitし、選択したセレクトボックスの値で条件分岐させればOKです。

Contents

テーブルを用意する

itemsテーブル

idbigint unsigned auto_increment
namestring 50
priceinteger
created_attimestamp
updated_attimestamp

マイグレーションはこんな感じで作りました。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateItemsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->id();
            $table->string('name', 50);
            $table->integer('price');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('items');
    }
}

ソート条件を書く

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Item;

class ItemController extends Controller
{
    public function index(Request $request)
    {
        // セレクトボックスで選択した値
        $select = $request->price;

        // セレクトボックスの値に応じてソート
        switch ($select) {
            case '1':
                //「指定なし」はID順
                $items = Item::get();
                break;
            case '2':
                // 「価格が低い順」でソート
                $items = Item::orderBy('price', 'asc')->get();
                break;
            case '3':
                // 「価格が高い順」でソート
                $items = Item::orderBy('price', 'desc')->get();
                break;
            default :
                // デフォルトはID順
                $items = Item::get();
                break;
        }
        return view('item.index', compact('items', 'select'));
    }
}

画面側は以下のように書きます。
※jQueryを使うので、CDNを読み込みましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>セレクトボックスでソート</title>
    {{-- JQUeryをCDNで読み込む --}}
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
    <form id="form">
        <select name="price" id="price">
            <option value="1" {{ $select == '1' ? 'selected': '' }}>指定なし</option>
            <option value="2" {{ $select == '2' ? 'selected': '' }}>価格が低い順</option>
            <option value="3" {{ $select == '3' ? 'selected': '' }}>価格が高い順</option>
        </select>
    </form>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Price</th>
            </tr>
        </thead>
        <tbody>
        @foreach ($items as $item)
            <tr>
                <td>{{ $item->id }}</td>
                <td>{{ $item->name }}</td>
                <td>{{ $item->price }}</td>
            </tr>
        @endforeach
        </tbody>
    </table>
    
    <script>
        $(function() {
            $('#price').change(function () {
                $('#form').submit();
            });
        });
    </script>
</body>
</html>

「指定なし」→ID順でソートされる

「価格が低い順」→priceが低い順でソートされる

「価格が高い順」→priceが高い順でソートされる

>>転職するのにおすすめのサイトはこちらをクリック
>>副業で稼ぐためにおすすめのサイトはこちらをクリック

スキルを売り買いするならココナラ

オンライン動画学習ならUdemy

コメント

コメントする

CAPTCHA


Contents
閉じる