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

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

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

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

3回答

569閲覧

Laravelで条件に応じた検索をしたいのですが、エラーが出ます。

borabora

総合スコア11

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/01/27 03:34

###前提・実現したいこと
Laravelで検索機能を実装したいと考えています。データベースと連携し、データベースに入っているものは表示、IDだけでの検索はできました。次のステップとして、商品名や著者などの名前で何かしらヒットすれば検索結果が表示されるキーワード検索を実現したいです。ご教示お願いいたします。
###発生している問題・エラーメッセージ

php

1Method getData does not exist.(View: C:\xampp\htdocs\sample1\resources\views\layouts\search.blade.php)

###該当のソースコード
1.モデルクラス Books.php
2.コントローラ BookController.php
3.ビュー search.blade.php

1.Books.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Books extends Model 8{ 9 public $timestamps = false; 10 11 12 public function authors() 13 { 14 return $this->hasMany(Authors::class); 15 } 16 17 public function publisheres() 18 { 19 return $this->hasMany(Publisheres::class); 20 } 21 22 public function genres() 23 { 24 return $this->hasMany(Genres::class); 25 } 26 27 28 public function getData() 29 { 30 return $this->書籍名; 31 } 32} 33

2.BookController.php(indexメソッドは使用していません。)

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Books; 7 8class BookController extends Controller 9{ 10 public function index(Request $request) 11 { 12 $items = Books::all(); 13 return view('books.index', ['items' => $items]); 14 } 15 16 public function find(Request $request) 17 { 18 return view('books.index', ['input' => '']); 19 } 20 21 public function search(Request $request) 22 { 23 $name = $request->input; 24 25 $item = Books::where('書籍名', 'like', '%' .$name . '%') 26 ->orwhere('著者名', 'like', '%' .$name . '%')->get(); 27 $param = ['input' => $request->input, 'item' => $item]; 28 return view('books.index', $param); 29 } 30 31} 32

3.search.blade.php(該当箇所のみ)

php

1<div id="search-container"> 2 <div id="search"> 3 <form method="post" action="/search"> 4 {{ csrf_field() }} 5 <span class="searchtitle">検索</span> 6 <span class="search-category"><select onchange="changeDetailSearchLink()" name="cat_p" id="search_select_category"><option value="">すべて</option> 7 <option value="00" selected>文芸</option><option value="01">実用</option><option value="03">芸術・アート</option><option value="04">ビジネス</option><option value="05">コンピュータ</option><option value="06">人文</option><option value="07">理工</option></select></span> 8 <input name="input" value="{{$input}}" placeholder="キーワードを入力" type="text"> 9 <input type="submit" name="submit" value="検索"> 10 </form> 11 <span class="detail-search"><a href="/search/detail" id="detail_search_link">詳細検索</a></span> 12 @if (isset($item)) 13 <table> 14 <tr><th>検索結果</th></tr> 15 <tr> 16 <td>{{$item->getData()}}</td> 17 </tr> 18</table> 19@endif 20 21 </div> 22 </div>

###試したこと
いろいろ調べてみたのですが似たような事例の解決方法が見つからず自分で参考書を読み返したりして考えていましたが、結局わかりませんでした。

###補足情報(FW/ツールのバージョンなど)
・Laravel5.5
・xampp
・PHP
・MariaDB

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

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

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

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

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

guest

回答3

0

著者を例として、ORMのリレーション先に対する条件判定は、whereHasを使うと可能です。

Books::whereHas("authors",function($q){ $q->where(authorsに対する条件) });

Laravel 5.5 Eloquent:リレーション

投稿2018/01/27 06:25

aro10

総合スコア4106

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

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

borabora

2018/01/28 02:30

回答ありがとうございます。調べて試してみます。
guest

0

get()で複数取って来ているのにforeachで回さなくて良いのですか?

投稿2018/09/12 06:03

redmagic

総合スコア17

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

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

0

修正すべき点は他にも多々ありますが、今回の質問の回答としては、
コントローラの $itemsearch.blade.php に渡せてないので、ビュー側で $item は使えません。
なので getData() も使えません。

//コントローラのsearchメソッド内 return view('books.index', $param) ->with(['item' => $item]);

複数レコードヒットするのであれば、itemsの方がいいとは思いますが、、

投稿2018/02/04 13:56

K-juju

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問