
じろう
2019年11月02日に参加
学習履歴詳細
[Laravel]課題アプリ作成。部分検索機能実装。まずは本文だけ検索→本文とタイトル→本文とタイトルと記事に紐づくタグも検索できるように。
今日のYWT
やったこと
Travelog
部分検索実装
Articleのcontentカラムの内容だけ検索を実装
- ルーティング作成
- コントローラ作成
- navbarに検索バー設置
- ついでにnavbarのitemを中央よりに
- コントローラにメソッド追加
- 検索結果を表示するビュー作成
Articleのcontentとtitleを検索できるようにする
orWhere
を使ってみる
Articleに紐付いたTagも検索できるようにする
- 最初は諦めてたけど
orWhereHas
で実装できると教えてもらう
- 最初は諦めてたけど
クエリビルダの
when
を使ってif
を消すついでに
load
で発行されるSQLをへらす
わかったこと
検索
最終的なコード
SearchController.php
<?php namespace App\Http\Controllers; use App\Article; use Illuminate\Http\Request; class SearchController extends Controller { public function search(Request $request) { $keyword = $request->input; $query = Article::query() ->when(isset($keyword), function($query) use ($keyword){ $query ->where('content', 'LIKE', "%{$keyword}%") ->orwhere('title', 'LIKE', "%{$keyword}%") ->orWhereHas('tags',function($query) use($keyword) { $query->where('name', 'LIKE', "%{$keyword}%"); }); }); $articles = $query->get()->sortByDesc('created_at') ->load([ 'user', 'likes', 'tags', 'photos' ]); return view('search.index', ['articles' => $articles]); } }
Article::query()
でクエリビルダを発行when(isset($keyword))
で、検索ワードがある場合に以下のクエリを発行するorWhere
で、or検索的な挙動実装リレーション先のタグモデルも検索するため、
orWhereHas
を使う- クロージャの中で変数を使いたい場合、
use($keyword)
でok
- クロージャの中で変数を使いたい場合、
load
でSQLの発行回数を減らせるのはこっちでも一緒viewのほうでは
@isset($articles)
で条件分岐した
S3への画像アップロード
- バケットは役割ごとに作る
CodeDeploy
で作ったやつを使いまわそうと思ったけどそれはあんまよくないみたい
- 画像の圧縮をしないとすぐいっぱいになりそうなのでそれは実装しないといけないみたい
次やること
- S3への画像アップロード
- 画像アップロード前に画像サイズの圧縮
PHP
Docker
Laravel
2020年11月01日(日)
6.4時間