2017-04-11 231 views
0

我想创建一个搜索,用户可以搜索书名。 “书籍”表中有一个名为“标题”的字段。Laravel搜索不返回任何结果

但是,如果我做dd($ books);我得到:

Collection {#667 ▼ 
    #items: [] 
} 

如果我做dd($ searchTerms);输出似乎是正确的

这里是我的控制器:

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.'%'); 
      } 
     })->get(); 
      dd($books); 
     return view('layouts/details', compact('books')); 
} 

搜索刀片:

@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 

回答

1

你忘了告诉雄辩的建设者,你OR的应有LIKE作为运营商:

$q->orWhere('title', 'like', '%'.$book.'%'); 
+0

作品的辉煌,我会接受这一次可 – Przemek

+0

不客气。 –

0

请更改细节的功能,这

function details(Request $request) { 
     $searchTerms = $request->book; 
     $books = Book::where(function($q) use($searchTerms) { 
     foreach ($searchTerms as $book) { 
     $q->orWhere('title', '%'.$book.'%'); 
     } 
    })->get(); 
     dd($books); 
    return view('layouts/details', compact('books')); 
}