タグ検索機能の実装
前提
テーブル構造は以下の感じです。
1 ビュー
<form action="{{url('/')}}" method="GET">
<label for="">タグで検索</label>
<input type="text" name="keyword" value="{{$keyword}}">
<input type="submit" value="検索" class="btn-primary">
</form>
2 コントローラー
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Article;
use App\Tag;
use App\Http\ArticleRequest;
use App\Http\Requests\ArticleRequest as RequestsArticleRequest;
class ArticleController extends Controller
{
public function __construct()
{
$this->authorizeResource(Article::class, "article");
}
public function index(Request $request)
{
$keyword = $request->input("keyword");
$query = Article::query();
$articles = Article::whereHas('tags', function ($query) use ($keyword) {
$query->where('name', 'LIKE', "%{$keyword}%");
})->get();
return view("articles.index", ["articles" => $articles, "keyword" => $keyword]);
}
}
ポイントはwherehas
を使って、リレーション先のnameをクエリに指定していることです!