私はlaravelの新機能で、アプリに検索機能を実装する方法をいくつか理解しています。Laravelで検索機能を実装する方法5.4
これまでに何を試みましたか?
私は、DBからデータを取得したモデルを作成した(が働いている)
class Post extends Model
{
public static function scopeSearch($query, $searchTerm)
{
return $query->where('city', 'like', '%' .$searchTerm. '%')
->orWhere('name', 'like', '%' .$searchTerm. '%');
}
}
このように私のコントローラの外観:。
使用のApp \ポスト。
class PostsController extends Controller
{
public function index(Request $request)
{
$searchTerm = $request->input('searchTerm');
$posts = Post::all()
->search($searchTerm);
return view('posts.index', compact('posts', 'searchTerm'));
}
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
}
php artisan tinkerモデルが動作しています。私はdbクエリを取得しています。フロントエンドに
私は送信ボタン
<div class="container">
<div class="col-sm-8">
<form action="posts.index" method="GET">
{{csrf_field()}}
<div class="input-group">
<input type="text" class="form-control" name="searchTerm" placeholder="Search for..." value="{{ isset($searchTerm) ? $searchTerm : '' }}">
<span class="input-group-btn">
<button class="btn btn-secondary" type="submit">Search</button>
</span>
</div>
</form>
</div>
</div>
で簡単な入力フィールドを持っていますが、検索入力フィールドにI入力何かあれば、今どのように私は、コントローラからのデータをretriveことができます。コードはすべての投稿を取得したときにのみ機能します。私は、コントローラからserachTerm
何とか
@extends('layouts.master')
@section('content')
<div class="col-sm-8 blog-main">
@foreach($posts as $post)
<div class="card" style="margin-bottom: 10px">
<div class="card-block">
<h3 class="card-title">{{ $post->Name1 }}</h3>
<small>Created at: {{ $post->created_at->toFormattedDateString() }}</small>
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<a href="{{$post->id}}" class="btn btn-primary">Details</a>
</div>
</div>
@endforeach
</div>
@endsection
'Post :: all()'を実行するときにこれを展開するだけで、クエリがすぐに実行されるため、検索クエリのスコープが適用されません。ここでの答えのようにスコープを適用すると、実際にクエリを実行して結果を得るために 'get()'を呼び出さなければなりません。 – jfadich
search()を使用する前に、プロジェクトにlarqavel/scoutを追加してモデルに特性を追加してください。 –