Omega搜索使您可以轻松地将智能搜索引擎添加到Laravel Power的网站或Web应用程序中。可以将其配置为搜索您的任何雄辩模型。
在引擎盖下,这使用了欧米茄搜索包。
您可以使用作曲家安装此软件包。
composer require divineomega/laravel-omega-search
要使用Laravel Omega搜索,请首先将OmegaSearchTrait添加到您希望搜索的模型中。然后,您必须实现以下两个抽象方法。
getOmegaSearchFieldsToSearch() - 必须返回模型字段的数组进行搜索。getOmegaSearchConditions() - 必须返回搜索条件的关联数组。示例: ['active' => 1, 'discontinued' => 0]设置后,可以通过在模型上调用静态omegaSearch($searchText)方法来执行搜索。此方法执行了智能模糊搜索,并将查询构建器返回,该查询构建器按照相关性的降序返回相关记录。
然后可以根据需要检索相关模型( ->get() )或分页( ->paginate() )。
如果要搜索相关表的内容,则可以使用加入。只需覆盖模型上的getOmegaSearchTablesToJoin ,然后返回OmegaSearchJoins的数组即可。
有两种定义连接的方法。第一种方法是调用OmegaSearchJoin::joinTableByForeignKey方法。您必须将本地表名称传递并将表名称连接到此方法。
默认情况下,加入表上的密钥将是加入的表名称singunarized,添加_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 ' )
];
}如果您想加入不仅由相关密钥链接的表,您可以手动将条件添加到JON。为此,创建一个新的OmegaSearchJoin对象,并调用addCondition方法以添加您的条件。您必须在构造函数中指定本地表名称和连接的表名称。您可以选择指定加入类型,默认值是JOIN
添加条件时,左侧的参数将自动使用本地表名称,并将加入的表名称添加到正确的条件。
请参阅下面的示例:
public function getOmegaSearchTablesToJoin ()
{
$ join = new OmegaSearchJoin ( ' contacts ' , ' divisions ' , ' INNER JOIN ' );
$ join -> addCondition ( ' gross_income ' , ' > ' , ' annual_income ' );
return [
$ join ,
];
}