整理一下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');
}