目次
はじめに
こちらは10本の記事で構成されています
- ①Vue.js & Laravel(環境構築)
- ②Vue.js & Laravel(CRUDシステムの準備)
- ③Vue.js & Laravel(Read…データベースからデータを取得)
- ④Vue.js & Laravel(Create…データベースにデータを保存)
- ⑤Vue.js & Laravel(Update…データベースのデータを更新)
- ⑥Vue.js & Laravel(Delete…データベースのデータを削除)
- ⑦Vue.js & Laravel(リアルなダミーデータを大量に挿入)
- ⑧Vue.js & Laravel(検索機能の実装)
- ⑨Vue.js & Laravel(ページャーの実装)
- ⑩Vue.js & Laravel(認証機能の実装)
目標
検索機能を追加する
実装
①フロントエンドから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...デ...					
				


 
           
           
          

 
      
 
			 
			 
			 
			 
			 
			 
			