除了基本的資料庫操作,有時候我們在網頁內,會希望做全文搜索的功能。
這時候,如果想用資料庫的指令做出來,或者想自己透過 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 這個套件的介紹就到這邊,各位明天見!