MENU

⑧Vue.js & Laravel(検索機能の追加)

目次

はじめに

こちらは10本の記事で構成されています

目標

検索機能を追加する

実装

①フロントエンドからAPIにリクエストする

<template>
    <div class="searchComponent">
+        <form @submit.prevent="taskSearch">
+            緊急:<input v-model="search.emergency" type="checkbox"><br>
+            内容:<input v-model="search.content" type="text">
+            <button>search</button>
+        </form>
    </div>
</template>

<script>
export default {
    data() {
        return {
+            search: {
+                content: "",
+                emergency: false,
+            },
        };
    },
    methods: {
+        taskSearch(){
+            axios.post("/api/task/search", this.search).then((res) => {
+            });
+        }
    },
};
</script>
<style lang="scss" scoped>
+ li{
+     list-style: none;
+     margin-bottom: 15px;
+ }
+ .red{
+     color: red;
+ }
</style>

これで「①フロントエンドからAPIにリクエストする」が達成されました

②APIからコントローラーにリクエストを送る

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::post('/task/create', 'TaskController@create');
Route::get('/task/read', 'TaskController@read');
Route::put('/task/update', 'TaskController@update');
Route::delete('/task/delete/{id}', 'TaskController@delete');
+ Route::post('/task/search', 'TaskController@search');

これで「②APIからコントローラーにリクエストを送る」が達成されました

③コントローラーからデータベースにリクエストを送る

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Task;

class TaskController extends Controller
{
    public function create(Request $request)
    {
        Task::create([
            'emergency' => $request->emergency,
            'content' => $request->content,
        ]);
    }
    public function read()
    {
        $data = Task::get();
        return $data;
    }
    public function update(Request $request)
    {
        Task::where("id", $request->id)->update([
            "emergency" => $request->emergency,
            "content" => $request->content,
        ]);
    }
    public function delete($id)
    {
        Task::where("id", $id)->delete();
    }
+    public function search(Request $request)
+    {
+        $query = Task::query()
+        ->orderBy('id', 'asc');
+
+        $query->where('emergency','=', $request->emergency);
+        if(isset($request->content)){
+            $query->where('content','like', "%".$request->content."%");
+        }
+
+        $data = $query->get();
+        return $data;
+    }
}

これで「③コントローラーからデータベースにリクエストを送る」が達成されました

④レスポンスを画面に表示させる

<template>
    <div class="searchComponent">
        <form @submit.prevent="taskSearch">
            緊急:<input v-model="search.emergency" type="checkbox"><br>
            内容:<input v-model="search.content" type="text">
            <button>search</button>
        </form>
+        <hr>
+        <ul>
+            <li v-for="(task, index) in tasks" :key="index">
+                緊急:<input type="checkbox" v-model="task.emergency" disabled='disabled'><br>
+                内容:<span :class="{red:task.emergency}">{{task.content}}</span>
+            </li>
+        </ul>
    </div>
</template>

<script>
export default {
    data() {
        return {
            search: {
                content: "",
                emergency: false,
            },
+            tasks:[],
        };
    },
    methods: {
        taskSearch(){
            axios.post("/api/task/search", this.search).then((res) => {
+                this.tasks = res.data;
            });
        }
    },
};
</script>
<style lang="scss" scoped>
li{
    list-style: none;
    margin-bottom: 15px;
}
.red{
    color: red;
}
</style>

これで「④レスポンスを画面に表示させる」が達成されました

次回

あわせて読みたい
⑨Vue.js & Laravel(ページャー機能の追加) 【はじめに】 こちらは10本の記事で構成されています ①Vue.js& Laravel(環境構築) ②Vue.js& Laravel(CRUDシステムの準備) ③Vue.js& Laravel(Read...デ...
独学に限界を感じたら、プログラミング教室がお勧めです。
エージェントは複数登録することをお勧めします。カウンセリングを通して、業界について勉強することができます。
フリーランス転職希望の方はフリーランス専門のエージェントを利用しましょう。
独学に限界を感じたら、プログラミング教室がお勧めです。
エージェントは複数登録することをお勧めします。
カウンセリングを通して、業界について勉強することができます。
フリーランス転職希望の方はフリーランス専門のエージェントを利用しましょう
よかったらシェアしてね!
  • URLをコピーしました!
目次