Php 如何在Laravel 5.4中实现搜索功能

Php 如何在Laravel 5.4中实现搜索功能,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我是Laravel的新手,对如何在我的应用程序中实现搜索功能有一些理解上的问题 到目前为止我都试过了 我创建了一个从数据库获取数据的模型(这是可行的) 我的控制器如下所示: use App\Post; class PostsController extends Controller { public function index(Request $request) { $searchTerm = $request->

我是Laravel的新手,对如何在我的应用程序中实现搜索功能有一些理解上的问题

到目前为止我都试过了

我创建了一个从数据库获取数据的模型(这是可行的)

我的控制器如下所示:

use App\Post;

    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,模型可以正常工作。我正在获取数据库查询

在前端,我有一个带有提交按钮的简单输入字段:

<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>
选中此项:

$posts = Post::search($searchTerm)->get();

您正在尝试获取所有记录,然后应用范围函数,而不是获取所有记录,请尝试:

$searchTerm = $request->input('searchTerm');
$posts = Post::search($searchTerm);
return view('posts.index', compact('posts', 'searchTerm'));

Laravel使搜索和自定义搜索(如实时结果等)变得非常容易。只需确保在前端限制HTTP请求

/**
 * Get a breed by name (returns similar results)
 * @param $term
 * @return \Illuminate\Http\JsonResponse
 */
public function getBreedByName($term)
{
    // Find an Breed by name
    $matchedTerm = Breed::where('text', 'LIKE', '%' . $term . '%')->get();
    return response()->json($matchedTerm);
}
然后在路由中创建对该控制器和方法的引用。在我的例子中,我在/routes/api.php中使用了以下内容

Route::get('/breeds/search/{term}', 'BreedsController@getBreedByName');

我希望这是有帮助的!如果您有任何问题,或者这不包括您的问题,请告诉我。

首先,您需要安装
laravel scout

使用:
composer需要laravel/scout

接下来,您需要使用
vendor:publish
命令发布Scout配置。此命令将
scout.php
发布到您的配置目录

下面是命令:
php artisan供应商:publish--provider=“Laravel\Scout\ScoutServiceProvider”

最后一步是将
Laravel\Scout\Searchable
trait添加到您希望使其可搜索的模型中


然后它的简单用法是:
NameOfModel::search($searchText)->get()

当您执行
Post::all()
时,它会立即执行查询,因此不会应用搜索查询范围。因此,像这里的答案一样应用范围,然后您必须调用
get()
来实际执行查询并获取结果。确保在使用search()之前将larqavel/scout添加到您的项目中,并将trait添加到模型中
/**
 * Get a breed by name (returns similar results)
 * @param $term
 * @return \Illuminate\Http\JsonResponse
 */
public function getBreedByName($term)
{
    // Find an Breed by name
    $matchedTerm = Breed::where('text', 'LIKE', '%' . $term . '%')->get();
    return response()->json($matchedTerm);
}
Route::get('/breeds/search/{term}', 'BreedsController@getBreedByName');