📜  laravel 搜索功能 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:14.861000             🧑  作者: Mango

Laravel 搜索功能 - PHP

Laravel 是一个流行的 PHP 框架,其中包含许多强大的功能,其中包括搜索功能。搜索功能可以让用户方便地找到他们所需的信息。在本文中,我们将介绍如何在 Laravel 应用程序中实现搜索功能。

要求

本教程需要以下软件:

  • Laravel 5.8 及以上版本
  • Composer
  • MySQL 或 MariaDB
创建数据库

为了实现搜索功能,我们需要创建一个数据库,并在该数据库中创建一个表来存储要搜索的数据。可以使用以下命令在 Laravel 中创建数据库:

php artisan make:migration create_articles_table --create=articles

该命令将创建一个新的迁移文件,用于创建一个名为 articles 的表。打开文件并添加以下代码:

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->text('body');
        $table->timestamps();
    });
}

public function down()
{
    Schema::dropIfExists('articles');
}

该迁移将创建一个 articles 表,其中包含 titlebody 字段,用于存储文章的标题和内容。

运行以下命令将该迁移应用于数据库:

php artisan migrate
添加搜索功能

现在,我们已经准备好将搜索功能添加到我们的 Laravel 应用程序中了。我们将使用 Laravel Scout 实现搜索功能。

安装 Scout

要使用 Scout,请在 Laravel 项目中运行以下命令:

composer require laravel/scout

然后,运行以下命令发布 Scout 的配置文件和搜索驱动程序:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

最后,添加以下行到 config/app.php 文件的 providers 数组中:

Laravel\Scout\ScoutServiceProvider::class,
配置搜索驱动程序

Scout 支持多种搜索驱动程序,包括 Algolia、Elasticsearch、Meilisearch 和 TNTSearch。在本教程中,我们将使用 TNTSearch 驱动程序。请在项目中运行以下命令安装 tijsverkoyen/tntsearch:

composer require tijsverkoyen/tntsearch

然后,编辑 config/scout.php 文件,添加以下行:

'tntsearch' => [
    'driver' => 'tntsearch',
    'storage' => storage_path(),
    'prefix' => 'scout',
    'fuzziness' => true,
],

最后,运行以下命令来生成 TNTSearch 驱动程序的索引文件:

php artisan scout:import "App\Models\Article"
创建搜索控制器

现在,我们已经完成了 Scout 的配置,我们可以创建一个控制器来处理搜索请求。运行以下命令在 Laravel 项目中创建 SearchController 控制器:

php artisan make:controller SearchController

然后,编辑 SearchController 控制器,添加以下代码:

use App\Models\Article;
use Illuminate\Http\Request;

class SearchController extends Controller
{
    public function search(Request $request)
    {
        $query = $request->input('query');

        $articles = Article::search($query)->get();

        return view('search', [
            'query' => $query,
            'articles' => $articles,
        ]);
    }
}

该控制器接收 HTTP 请求和查询,并使用 Scout 搜索文章数据。然后,将搜索结果渲染到 search 视图中。

创建搜索表单和视图

在我们的 Laravel 应用程序中,我们需要一个表单让用户输入文本查询。以下代码示例演示如何在 Laravel 中创建搜索表单:

<form method="GET" action="{{ route('search') }}">
    <input type="text" name="query" placeholder="Search...">
    <button type="submit">Search</button>
</form>

将此表单放在 resources/views/search.blade.php 视图中。

在路由中注册搜索路由

在 Laravel 中,我们需要在路由中注册控制器方法。打开 routes/web.php 文件并添加以下行:

Route::get('/search', [SearchController::class, 'search'])->name('search');
显示搜索结果

现在,我们已经完成了搜索的实现,我们需要更新 search 视图来显示搜索结果。以下代码示例演示如何在 Laravel 中显示搜索结果:

@if ($articles->count() > 0)
    @foreach ($articles as $article)
        <h2>{{ $article->title }}</h2>
        <p>{{ $article->body }}</p>
    @endforeach
@else
    <p>No articles found</p>
@endif

现在,我们已经成功在 Laravel 项目中实现了搜索功能。

结论

本文介绍了在 Laravel 应用程序中实现搜索功能的步骤。这将有助于用户在内容中查找他们所需的信息。使用 Scout 和 TNTSearch 驱动程序,开发者可以使用 Laravel 框架快速实现高效的搜索功能。