teratail header banner
teratail header banner
質問するログイン新規登録
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1335閲覧

Laravelで検索機能を実装したい

moana

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/07/12 13:51

0

0

実現したいこと

  • 全投稿内容をあいまい検索をし、適当な投稿を表示する

前提

Laravelでログイン機能付き掲示板を作成しています。
検索フォームに入力されたらその内容のみを表示できるようにしたいです。
postsテーブルから入手したレコード情報は$listに格納しており、listsという名前でビューに渡しています。

発生している問題・エラーメッセージ

エラーは出ていませんが検索機能が機能せず全ての投稿が表示されてしまう

該当のソースコード

PostController.php

1public function index(Request $request) 2 { 3 $keyword = $request->input('keyword'); 4 $list=DB::table('posts')->get(); 5 if(!empty($keyword)) { 6 $list->where('contents', 'LIKE', "%{$keyword}%"); 7 } 8 //$posts = $list->get(); 9 return view('posts.index', ['lists'=>$list]); 10 }

index.blade.php

1@extends('layouts.app') <!--「app.blade.php」の方が親となり、「index.blade.php」の方が子のビューファイルとなる--> 2@section('content') <!--囲っている部分の名前付け--> 3<div class='container'> <!--containerクラス--> 4 <p class="pull-right"><a class="btn btn-success" href="/create-form">投稿する</a></p> <!--投稿するボタン--> 5 <h2 class='page-header'>投稿一覧</h2> <!--タイトル--> 6 <div id="search"> 7 <form action="/index" method="get"> 8 <input type="text" name="keyword" placeholder="キーワードを入力"> 9 <input type="submit" name="submit" value="検索"> 10 </form> 11 </div> 12 <table class='table table-hover'> <!--表--> 13 <tr> <!--表の1行--> 14 <th>名前</th> <!--表の見出し--> 15 <th>投稿内容</th> <!--表の見出し--> 16 <th>投稿日時</th> <!--表の見出し--> 17 <th></th> <!--表の見出し--> 18 <th></th> <!--表の見出し--> 19 </tr> 20 @foreach ($lists as $list) <!--$listsに入っている値を$listに格納し順番に表示--> 21 <tr> <!--containerクラス--> 22 <td>{{ $list->user_name }}</td> <!--$listの中のusernameを表示--> 23 <td>{{ $list->contents }}</td> <!--$listの中のcontentsを表示--> 24 <td>{{ $list->created_at }}</td> <!--$listの中のcreated_atを表示--> 25 <td><a class="btn btn-primary" href="/post/{{ $list->id }}/update-form">更新</a></td> <!--更新ボタン--> 26 <td><a class="btn btn-danger" href="/post/{{ $list->id }}/delete" onclick="return confirm('こちらの投稿を削除してもよろしいでしょうか?')">削除</a></td> <!--削除ボタン--> 27 </tr> 28 @endforeach <!--foreach文を閉じる--> 29 </table> 30</div> 31@endsection

試したこと

compactの使用、return viewの引数に’keyword'を入れる

補足情報(FW/ツールのバージョンなど)

下記のサイトを参考にしましたが、viewファイルへの受け渡しの部分がよくわかりませんでした。
https://qiita.com/hinako_n/items/7729aa9fec522c517f2a

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php

1$list=DB::table('posts')->get();

上記の時点で get(); を実行してしまっているので、条件に関係なくデータ取得してしまっています。

次のようにしてクエリオブジェクトだけ最初に取得しておき、最後に get() を実行する必用があります。

php

1 $query=DB::table('posts'); 2 if(!empty($keyword)) { 3 $query->where('contents', 'LIKE', "%{$keyword}%"); 4 } 5 $list = $query->get();

投稿2023/07/12 14:01

Eggpan

総合スコア3297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問