ユーザーが書籍のタイトルを入力できるように検索を実装しようとしていて、laravelがデータベースを参照して任意の文字に一致する結果を表示します。定義されていないメソッドを呼び出すデータベースクエリビルダー::タイトル()
私の「ブック」テーブルには、「タイトル」フィールドが含まれています。しかし
I取得 'F' 例えばI入力の場合:未定義のメソッドを照らし\ Databaseへ
コール\クエリー\ビルダー::タイトル()
検索刃:
@extends('layouts.master')
@section('title')
@section('content')
<h1>Search for books</h1>
<form action="{{url('details')}}" method="POST">
{{ csrf_field() }}
<div>
<input type='text' name='book' placeholder='Enter any character' />
</div>
<input type="submit" name="submitBtn" value="Search">
</form>
@endsection
詳細=結果ページ:
@extends('layouts.master')
@section('title')
@section('content')
<h1>User Details</h1>
<form>
<p>
<ul>
@foreach ($books as $book)
<a href= "{{url('reader/'.$book->title)}}">
{{$book->title}}</a>
</p>
</form>
@endforeach
</ul>
@endsection
コントローラ:それはあなたが持っていない関係を使用しているため、更新
function search()
{
$books = Book::all();
return view('layouts/search',['books' => $books]);
}
function details() {
$searchTerms = explode(' ', \Request::input('book'));
$books = Book::whereHas('title', function($query) use($searchTerms) {
if(!empty($searchTerms)){
for
each($searchTerms as $book) {
$query->where('book', 'LIKE', '%'. $book .'%');
}
}
})->first();
return view('layouts/details', compact('book'));
}
::
function search()
{
$books = Book::all();
return view('layouts/search',['books' => $books]);
}
function details() {
$searchTerms = explode(' ', \Request::input('book'));
$books = Book::where(function($q) use($searchTerms) {
foreach ($searchTerms as $book) {
$q->orWhere('title', '%'.$book.'%');
}
})->first();
return view('layouts/details', compact('books'));
}
あなたのインデントは混乱です。どこかで ' - > get()' '/' 'first()'/' - > paginate()'を使ってクエリを終了する前に、モデルのカラムをクエリで呼び出そうとしています。 – devk
ビューにコレクションが必要なので、 ' - > get()'または ' - > paginate()'を使用してください。また、 'dd($ books);'でデバッグするだけで、実際にクエリが返すものを確認するためにビューを返すこともできます。 – Robert