# Основы
Для поиска необходимо указать, какие поля модели будут участвовать в поиске.
Для этого необходимо их перечислить в возвращаемом массиве в методе search()
.
Если метод возвращает пустой массив, то поисковая строка не будет отображаться.
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Fields\Text;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function search(): array { return ['id', 'title', 'text']; } //...}
# Полнотекстовый поиск
Если требуется fulltext поиск, то необходимо воспользоваться атрибутом MoonShine\Attributes\SearchUsingFullText
.
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Attributes\SearchUsingFullText; use MoonShine\Fields\Text;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... #[SearchUsingFullText(['title', 'text'])] public function search(): array { return ['id']; } //...}
Не забудьте добавить fulltext индекс
# Поиск по ключам json
Для полей Json, которые используются как ключ-значение keyValue()
,
можно указать какой ключ поля участвует в поиске.
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Fields\Text;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function search(): array { return ['data->title']; } //...}
Для многомерных Json, которые формируются через поля fields()
,
ключ для поиска необходимо задавать следующим образом:
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Fields\Text;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function search(): array { return ['data->[*]->title']; } //...}
# Поиск по отношениям
Поиск можно осуществлять по отношениям, для этого необходимо указать по какому полю отношения производить поиск.
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Fields\Text;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function search(): array { return ['category.title']; } //...}
# Глобальный поиск
В админ-панели MoonShine глобальный поиск можно реализовать на основе интеграции Laravel Scout .
Для реализации глобального поиска необходимо:
1 Указать перечень моделей для поиска в файле конфигурацииconfig/moonshine.php
.
'global_search' => [ Article::class, User::class],
use MoonShine\Scout\HasGlobalSearch;use MoonShine\Scout\SearchableResponse;use Laravel\Scout\Searchable;use Laravel\Scout\Builder; class Article extends Model implements HasGlobalSearch{ use Searchable; public function searchableQuery(Builder $builder): Builder { return $builder->take(4); } public function toSearchableResponse(): SearchableResponse { return new SearchableResponse( group: 'Articles', title: $this->title, url: '/', preview: $this->text, image: $this->thumbnail ); }}