質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1066閲覧

検索機能を実装したい

Atsushi_5858

総合スコア6

Laravel

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/02/06 12:32

編集2021/02/09 04:32

前提・実現したいこと

現在laravelを使って開発し、検索機能を実装しているのですが、機能せず、ページがそのまま帰ってきてしまいます。

該当のソースコード

PostsControllerphp

1<?php 2 3namespace App\Http\Controllers; 4 5use App\Post; 6use Auth; 7use Validator; 8use Illuminate\Http\Request; 9 10class PostsController extends Controller 11{ 12 //コンストラクタ (このクラスが呼ばれると最初にこの処理をする) 13 public function __construct() 14 { 15 // ログインしていなかったらログインページに遷移する(この処理を消すとログインしなくてもページを表示する) 16 $this->middleware('auth'); 17 } 18 19 public function index() 20 { 21 $posts = Post::limit(10) 22 ->orderBy('created_at', 'desc') 23 ->get(); 24 25 // テンプレート「post/index.blade.php」を表示します。 26 return view('post/index', ['posts' => $posts]); 27 } 28 29 public function new() 30 { 31 // テンプレート「post/new.blade.php」を表示 32 return view('post/new'); 33 34 } 35 36 public function store(Request $request) 37 { 38 //バリデーション(入力値チェック) 39 $validator = Validator::make($request->all() , ['caption' => 'required|max:255', 'place' => 'required|max:255','photo' => 'required']); 40 41 //バリデーションの結果がエラーの場合 42 if ($validator->fails()) 43 { 44 return redirect()->back()->withErrors($validator->errors())->withInput(); 45 } 46 47 // Postモデル作成 48 $post = new Post; 49 $post->caption = $request->caption; 50 $post->place = $request->place; 51 $post->user_id = Auth::user()->id; 52 53 $post->save(); 54 55 $request->photo->storeAs('public/post_images', $post->id . '.jpg'); 56 57 // 「/」 ルートにリダイレクト 58 return redirect('/'); 59 } 60 61 public function destroy($post_id) 62 { 63 $post = Post::find($post_id); 64 $post->delete(); 65 return redirect('/'); 66 } 67 68 public function research (Request $request) 69 { 70 // リクエストパラメタにkeywordが入っていたら検索機能を動かす 71 if($request->has('keyword')) { 72 // SQLのlike句でitemsテーブルを検索する 73 $posts = Post::where('caption', 'place', '%'.$request->get('keyword').'%')->limit(10); 74 } 75 else{ 76 $posts = Post::limit(10); 77 } 78 return view('post/index', ['posts' => $posts]); 79 } 80} 81

navberbladephp

1@section('navbar') 2 <nav class="navbar navbar-expand-lg navbar-light"> 3 <div class="container"> 4 <a class="navbar__brand navbar__mainLogo" href="/"></a> 5 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 6 <span class="navbar-toggler-icon"></span> 7 </button> 8 9 <!--検索画面を追加,デバイス用にレイアウト修正--> 10 <form method="GET" action="/" class="ml-5"> 11 <input type="text" name="keyword"> 12 <input type="submit" value="検索"> 13 </form> 14 15 <div class="collapse navbar-collapse" id="navbarSupportedContent"> 16 <ul class="navbar-nav ml-md-auto align-items-center"> 17 <li> 18 <a class="btn btn-primary" href="/posts/new">投稿</a> 19 </li> 20 <li> 21 <a class="nav-link commonNavIcon profile-icon" href="/users/{{ Auth::user()->id }}"></a> 22 </li> 23 </ul> 24 </div> 25 </div> 26 </nav> 27@endsection 28 29

table

試したこと

検索フォームからは、キーワードが送信されていたので、PostsControllerphpのresearchメソッドに問題があると考えています。

・キーワードを変数にまとめる。
・データの取得方法を変えたりしたのですが、機能しませんでした。

初歩的な問題ですが回答いただければ幸いです。

##追記

viewで指定した、ページは以下のコードになっています
もし、心当たりがありましたら、ご指摘いただければ幸いです。

@extends('layouts.app') @include('navbar') @include('footer') @section('content') @foreach ($posts as $post) <div class="col-md-8 col-md-2 mx-auto"> <div class="card-wrap"> <div class="card"> <div class="card-header align-items-center d-flex"> <a class="no-text-decoration" href="/users/{{ $post->user->id }}"> @if ($post->user->profile_photo) <img class="post-profile-icon rounded" src="{{ asset('storage/user_images/' . $post->user->profile_photo) }}"/> @else <img class="post-profile-icon rounded" src="{{ asset('/images/blank_profile.png') }}"/> @endif </a> <a class="black-color no-text-decoration" title="{{ $post->user->name }}" href="/users/{{ $post->user->id }}"> <strong>{{ $post->user->name }}</strong> </a> @if ($post->user->id == Auth::user()->id) <a class="ml-auto mx-0 my-auto" rel="nofollow" href="/postsdelete/{{ $post->id }}"> <div class="delete-post-icon"> </div> </a> @endif <!--ヘッダーに対して、いいねのアイコンと、保存ボタンを追加する-->  </div> <div class="card-body d-flex"> <div class="card-body-left"> <a href="/users/{{ $post->user->id }}"> <!--遷移先を詳細画面にする--> <img src="/storage/post_images/{{ $post->id }}.jpg" class="card-img-top" /> </a> </div> <div class="card-body-right ml-5 mt-2"> <div class="card-text d-block"> <p><strong>施設名・住所</strong></p> <span>{{ $post->place }}</span>  </div> <div class="card-title d-block mt-5"> <p><strong>説明</strong></p> <span>{{ $post->caption }}</span> </div> </div> </div> </div> </div> </div> @endforeach @endsection

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

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

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

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

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

Lulucom

2021/02/07 05:04 編集

コードをコメントに掲載されると整形されませんので、質問本文に追記しましょう。 また、掲載された各コードの正確なファイル名を記載しましょう。ディレクトリも含め、大文字/小文字の区別や「.」の有無も正確にです。それらが違っていてエラーになっている可能性もあるからです。 > 機能せず、ページがそのまま帰ってきてしまいます > 検索できずにいます これらの表現は曖昧で状況を掴みづらいと思います。起きている現象を具体的に記載しましょう。例えば、画面が真っ白になるとか、エラーが起きているならエラーメッセージなどです。 Laravelのバージョンもお願いします。 (質問の本文へ追記ください)
guest

回答1

0

ベストアンサー

以下のようにするとどうでしょうか。

php

1 public function research (Request $request) 2 { 3 // リクエストパラメタにkeywordが入っていたら検索機能を動かす 4 if($request->has('keyword')) { 5 // SQLのlike句でpostsテーブルを検索する 6 $posts = Post::where('caption', 'like', '%'.$request->query('keyword').'%') 7 ->orWhere('place', 'like', '%'.$request->query('keyword').'%') 8 ->limit(10)->get(); 9 } 10 else{ 11 $posts = Post::limit(10)->get(); 12 } 13 return view('post.index', ['posts' => $posts]); 14 }

参考:

投稿2021/02/06 13:04

編集2021/02/07 05:21
Lulucom

総合スコア1899

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

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

Atsushi_5858

2021/02/07 03:42

初めに、ご返信いただきありがとうございます。 ご指摘いただいたように、テーブルの検索文を変更したのですが、検索できずにいます。おそらく、viewの表示の方法が間違えていると思い、調査しています。 viewで指定した、ページは以下のコードになっています もし、心当たりがありましたら、ご指摘いただければ幸いです。 ``` @extends('layouts.app') @include('navbar') @include('footer') @section('content') @foreach ($posts as $post) <div class="col-md-8 col-md-2 mx-auto"> <div class="card-wrap"> <div class="card"> <div class="card-header align-items-center d-flex"> <a class="no-text-decoration" href="/users/{{ $post->user->id }}"> @if ($post->user->profile_photo) <img class="post-profile-icon rounded" src="{{ asset('storage/user_images/' . $post->user->profile_photo) }}"/> @else <img class="post-profile-icon rounded" src="{{ asset('/images/blank_profile.png') }}"/> @endif </a> <a class="black-color no-text-decoration" title="{{ $post->user->name }}" href="/users/{{ $post->user->id }}"> <strong>{{ $post->user->name }}</strong> </a> @if ($post->user->id == Auth::user()->id) <a class="ml-auto mx-0 my-auto" rel="nofollow" href="/postsdelete/{{ $post->id }}"> <div class="delete-post-icon"> </div> </a> @endif <!--ヘッダーに対して、いいねのアイコンと、保存ボタンを追加する-->  </div> <div class="card-body d-flex"> <div class="card-body-left"> <a href="/users/{{ $post->user->id }}"> <!--遷移先を詳細画面にする--> <img src="/storage/post_images/{{ $post->id }}.jpg" class="card-img-top" /> </a> </div> <div class="card-body-right ml-5 mt-2"> <div class="card-text d-block"> <p><strong>施設名・住所</strong></p> <span>{{ $post->place }}</span>  </div> <div class="card-title d-block mt-5"> <p><strong>説明</strong></p> <span>{{ $post->caption }}</span> </div> </div> </div> </div> </div> </div> @endforeach @endsection ```
Lulucom

2021/02/08 05:39 編集

コントローラで、表示するビューを指定するときに return view('post/index', ... としているため「ビューが見つからない」というエラーになっているのではないでしょうか? return view('post.index', ... とするとどうでしょうか。
Atsushi_5858

2021/02/09 04:32

ご返信いただき、ありがとうございます。 また、質問方法が抽象的で申し訳ございませんでした。ご指摘いただき大変勉強になりました。質問文に関してですが、早速、修正させていただきました。ファイル名に関しては、プロジェクトを終了してしまったため、今回追記はしていませんが、次回は理解しやすい質問文を心がけます。 尚、本題の検索機能ですが、無事機能しました。アドバイスいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問