divineomega/ laravel-omega-search
轻松地将智能搜索引擎添加到您的Laravel网站或Web应用程序
Requires
- php: >=7.1
- divineomega/omega-search: ^4.1.0
- laravel/framework: ^5.1||^6.0
README
Omega Search允许您轻松地将智能搜索引擎添加到您的Laravel网站或Web应用程序。它可以配置为搜索您的任何Eloquent模型。
底层,这个使用了Omega Search包。
安装
您可以使用Composer安装此包。
composer require divineomega/laravel-omega-search
使用
要使用Laravel Omega Search,首先将OmegaSearchTrait
添加到您要搜索的模型中。然后,您必须实现以下两个抽象方法。
getOmegaSearchFieldsToSearch()
- 必须返回一个包含模型要搜索的字段的数组。getOmegaSearchConditions()
- 必须返回一个包含搜索条件的关联数组。例如:['active' => 1, 'discontinued' => 0]
设置完成后,可以通过在模型上调用静态方法omegaSearch($searchText)
来执行搜索。该方法执行智能模糊搜索,并返回一个按相关性降序排列的相关记录的查询构建器。
然后,根据需要检索相关模型(->get()
)或分页(->paginate()
)。
连接表
如果您想搜索相关表的内容,可以使用连接。只需覆盖模型中的getOmegaSearchTablesToJoin
,并返回一个包含OmegaSearchJoins
的数组。
定义连接
通过相关键连接
有两种定义连接的方式。第一种是调用OmegaSearchJoin::joinTableByForeignKey
方法。您必须传递本地表名和连接表名给此方法。
默认情况下,连接表上的键将是将连接表名单数化并附加_id
的结果,本地表上的键将是id
。这些可以手动使用此方法的第三和第四个参数进行设置。
下面是一个示例
public function getOmegaSearchTablesToJoin() { return [ OmegaSearchJoin::joinTableByForeignKey($this->getTable(), 'divisions'), ]; }
或
public function getOmegaSearchTablesToJoin() { return [ OmegaSearchJoin::joinTableByForeignKey($this->getTable(), 'divisions', 'id', 'division_id), ]; }
您可以将连接链式调用,如下所示
public function getOmegaSearchTablesToJoin() { return [ OmegaSearchJoin::joinTableByForeignKey($this->getTable(), 'divisions'), OmegaSearchJoin::joinTableByForeignKey('divisions', 'companies', 'id', 'company_id') ]; }
手动连接
如果您想连接不通过相关键连接的表,您可以手动添加条件到连接。为此,创建一个新的OmegaSearchJoin
对象并调用addCondition
方法添加您的条件。您必须在构造函数中指定本地表名和连接表名。可选地,您可以指定连接类型,默认为JOIN
添加条件时,左侧的参数将自动添加本地表名,连接表名将添加到右侧的条件。
下面是一个示例
public function getOmegaSearchTablesToJoin() { $join = new OmegaSearchJoin('contacts', 'divisions', 'INNER JOIN'); $join->addCondition('gross_income', '>', 'annual_income'); return [ $join, ]; }