Ich versuche, eine Suche zu implementieren, so dass Benutzer den Titel eines Buches eingeben kann und Laravel die Datenbank durchsuchen und Ergebnisse anzeigen, die mit einem beliebigen Zeichen übereinstimmen.Aufruf zu undefinierter Methode Illuminate Database Query Builder :: title()
Meine 'Buch' Tabelle enthält ein 'Titel' Feld.
Allerdings, wenn ich Eingang zum Beispiel 'f' ich:
Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: Titel()
Search Klinge:
@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
Einzelheiten = Ergebnisseite:
@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
Controller:
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'));
}
aktualisiert ::
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'));
}
Ihre Einbuchtung ist ein Chaos. Sie versuchen, die Modellspalte bei der Abfrage aufzurufen (bevor Sie die Abfrage mit '-> get()'/-'> first() '/' -> paginate() ') irgendwo beenden. – devk
Verwenden Sie entweder '-> get()' oder '-> paginate()', da Sie eine Sammlung in Ihrer Ansicht benötigen. Debuggen Sie auch nur mit 'dd ($ books);', bevor Sie die Ansicht zurückgeben, um zu überprüfen, was von der Abfrage tatsächlich zurückgegeben wird. – Robert