Для поиска необходимо указать, какие поля модели будут участвовать в поиске.
Для этого нужно перечислить их в возвращаемом массиве в методе search()
.
Если метод возвращает пустой массив, то строка поиска не будет отображаться.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected function search(): array
{
return ['id', 'title', 'text'];
}
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['id', 'title', 'text'];
}
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['id', 'title', 'text'];
}
}

Если требуется полнотекстовый поиск, то необходимо использовать атрибут SearchUsingFullText
.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
use MoonShine\Support\Attributes\SearchUsingFullText;
class PostResource extends ModelResource
{
#[SearchUsingFullText(['title', 'text'])]
protected function search(): array
{
return ['id'];
}
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
use MoonShine\Support\Attributes\SearchUsingFullText;
class PostResource extends ModelResource
{
// ...
#[SearchUsingFullText(['title', 'text'])]
protected function search(): array
{
return ['id'];
}
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
use MoonShine\Support\Attributes\SearchUsingFullText;
class PostResource extends ModelResource
{
// ...
#[SearchUsingFullText(['title', 'text'])]
protected function search(): array
{
return ['id'];
}
}
Не забудьте добавить полнотекстовый индекс.
Для Json
полей, которые используются в качестве ключ-значение keyValue()
, можно указать, какой ключ поля участвует в поиске.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected function search(): array
{
return ['data->title'];
}
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['data->title'];
}
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['data->title'];
}
}
Для многомерных Json
, которые формируются через поля fields()
, ключ поиска нужно указывать следующим образом:
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected function search(): array
{
return ['data->[*]->title'];
}
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['data->[*]->title'];
}
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['data->[*]->title'];
}
}
Вы можете осуществлять поиск по связям. Для этого нужно указать, по какому полю связи осуществлять поиск.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected function search(): array
{
return ['category.title'];
}
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['category.title'];
}
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
// ...
protected function search(): array
{
return ['category.title'];
}
}
В MoonShine можно реализовать глобальный поиск на основе интеграции Laravel Scout.
Для реализации глобального поиска необходимо:
- Установить пакет
moonshine/scout
.
composer require moonshine/scout
composer require moonshine/scout
composer require moonshine/scout
php artisan vendor:publish --provider="MoonShine\Scout\Providers\ScoutServiceProvider"
php artisan vendor:publish --provider="MoonShine\Scout\Providers\ScoutServiceProvider"
php artisan vendor:publish --provider="MoonShine\Scout\Providers\ScoutServiceProvider"
- Указать список моделей для поиска в конфигурационном файле
config/moonshine-scout.php
.
'models' => [
Article::class,
User::class,
],
'models' => [
Article::class,
User::class,
],
'models' => [
Article::class,
User::class,
],
- Реализовать интерфейс в моделях.
namespace App\Models;
use Laravel\Scout\Builder;
use Laravel\Scout\Searchable;
use MoonShine\Scout\HasGlobalSearch;
use MoonShine\Scout\SearchableResponse;
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,
);
}
}
namespaces
namespace App\Models;
use Laravel\Scout\Builder;
use Laravel\Scout\Searchable;
use MoonShine\Scout\HasGlobalSearch;
use MoonShine\Scout\SearchableResponse;
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,
);
}
}
namespace App\Models;
use Laravel\Scout\Builder;
use Laravel\Scout\Searchable;
use MoonShine\Scout\HasGlobalSearch;
use MoonShine\Scout\SearchableResponse;
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,
);
}
}
- Заменить компонент
Search
в Layout
.
protected function getSearchComponent(): ComponentContract
{
return MoonShine\Scout\Components\Search::make();
}
protected function getSearchComponent(): ComponentContract
{
return MoonShine\Scout\Components\Search::make();
}
protected function getSearchComponent(): ComponentContract
{
return MoonShine\Scout\Components\Search::make();
}