iT邦幫忙

2022 iThome 鐵人賽

DAY 28
1
Modern Web

Laravel 9 漫遊,享受魔法般的極速網頁開發體驗系列 第 28

Day 28:用Laravel 處理全文搜索:Laravel Scout

  • 分享至 

  • xImage
  •  

除了基本的資料庫操作,有時候我們在網頁內,會希望做全文搜索的功能。

這時候,如果想用資料庫的指令做出來,或者想自己透過 php 寫出來,就會比較困難了。要能全文搜索,通常都會需要透過安裝搜尋引擎,才能達成比較好的效果。

在 Laravel,要做到這件事情也可以透過套件:Laravel Scout!

首先,我們先安裝 Laravel Scout

./vendor/bin/sail composer require laravel/scout

接著,是處理 Scout 的安裝。

./vendor/bin/sail artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
iceProvider"

安裝好之後,我們就會在 config 資料夾裡面,看到 scout.php

如果你前面是用 Laravel Sail 安裝的,那麼就已經安裝好 meilisearch 作為我們的搜尋引擎了。

.env 裡面會看到

SCOUT_DRIVER=meilisearch

不過我們要手動安裝程式缺的套件

./vendor/bin/sail composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle

接著,在我們想要全文搜索的物件內,加上 use Laravel\Scout\Searchable 這個 Trait

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
 
class Post extends Model
{
    use Searchable;
}

這樣一來,我們在搜尋該物件時,就可以使用搜尋引擎了

use App\Models\Post;
 
$posts = Post::search('Star Trek')->get();

由於這邊的搜尋已經脫離資料庫操作的範疇,所以針對 ORM 遠本支援的一些操作,也會變成無法使用。

不過,用 where() 一些簡單的條件搜尋還是可以的

use App\Models\Post;

$posts = Post::search('Star Trek')->where('user_id', 1)->get();

也可以使用 whereIn()

use App\Models\Post;

$posts = Post::search('Star Trek')->whereIn(
    'status', ['posted', 'open']
)->get();

今天有關 Laravel Scout 這個套件的介紹就到這邊,各位明天見!


上一篇
Day 27:協助確認並修正 coding style:Laravel Pint
下一篇
Day 29:學習 Laravel 的各個資源
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言