全局搜索
建议编辑使用全文搜索
Orchid 通过 Laravel Scout 包提供全文搜索功能。该包为搜索 Eloquent
模型提供了一个抽象层,并要求您指定应用程序将使用的搜索驱动程序。这些驱动程序可以是 elasticsearch、algolia、sphinx 或其他解决方案。
要使您的模型在应用程序中可搜索,您必须在 Orchid 配置文件中注册它们。您可以通过在“search”数组中为每个要使其可搜索的模型添加一个新条目来实现。例如:
'search' => [
\App\Models\Idea::class,
],
此示例使用了 presenters,强烈建议您熟悉它们。同时,请采取步骤从文档 Laravel Scout 中配置模型。
Presenter 用于显示搜索结果,它调用模型的 presenter()
方法:
namespace App;
use App\Orchid\Presenters\IdeaPresenter;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Idea extends Model
{
use Searchable;
/**
* 获取模型的 presenter。
*
* @return IdeaPresenter
*/
public function presenter()
{
return new IdeaPresenter($this);
}
/**
* 获取模型的可索引数据数组。
*
* @return array
*/
public function toSearchableArray()
{
$array = $this->toArray();
// 自定义数组...
return $array;
}
}
在代表中,我们指明了 Searchable
接口并定义了将返回用户显示值的方法,例如:
namespace App\Orchid\Presenters;
use Laravel\Scout\Builder;
use Orchid\Screen\Contracts\Searchable;
use Orchid\Support\Presenter;
class IdeaPresenter extends Presenter implements Searchable
{
/**
* @return string
*/
public function label(): string
{
return 'Ideas';
}
/**
* @return string
*/
public function title(): string
{
return $this->entity->name;
}
/**
* @return string
*/
public function subTitle(): string
{
return '简短描述';
}
/**
* @return string
*/
public function url(): string
{
return url('/');
}
/**
* @return string
*/
public function image(): ?string
{
return null;
}
/**
* @param string|null $query
*
* @return Builder
*/
public function searchQuery(string $query = null): Builder
{
return $this->entity->search($query);
}
/**
* @return int
*/
public function perSearchShow(): int
{
return 3;
}
}
自定义搜索查询
要自定义搜索查询,您可以重写默认的 searchQuery()
方法。该方法返回一个 Builder
实例,表示用于索引模型的查询。
public function searchQuery(string $query = null): Builder
{
return $this->entity->search($query)->where('active', true);
}
在这里,在 searchQuery()
方法中,使用了 where()
方法来限制搜索仅限于活跃的模型。