Laravel Scout 基础使用记录

整理一下Laravel Scout的使用细节,包含基础搜索使用、搜索后数据整理及模型配置

搜索使用

# 直接全文索引
$posts = Post::search("张三")->get();

# 获取原始结果
Post::search("张三")->raw();

# 指定查询时自定义的索引
->within("test_posts_index")

# 简单的where及whereIn子句
->where('user_id', 1)
->whereIn('user_id', [1, 2])

# 分页
->paginate(15)

搜索后数据整理

# 自定义结果的其他查询
->query(fn (Builder $query) => $query->with('author'))

# 分页后修整数据,必须单独再次foreach,否则分页数据会丢失,且修改无效

附:模型基础方法

# 配置键名
public function getScoutKeyName(): mixed
{
    return 'email';
}

# 配置键值
public function getScoutKey(): mixed
{
    return $this->email;
}

# 配置此条数据是否被添加到索引,直接调用`searchable`会覆盖此方法
public function shouldBeSearchable(): bool
{
    return $this->isPublished();
}

# 自定义搜索数据
public function toSearchableArray(): array
{
    $array = $this->toArray();
    // ...自定义
    return $array;
}

# 添加可以被搜索的模型关系
# 通过文章作者姓名可以搜索到文章
protected function makeAllSearchableUsing(Builder $query): Builder
{
    return $query->with('author');
}