# Запрос
Часто необходимо изначально изменить все запросы ресурса к базе данных.
Вы можете легко переопределить query builder в ресурсе.
namespace App\MoonShine\Resources; use App\Models\Post;use Illuminate\Contracts\Database\Eloquent\Builder;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function query(): Builder { return parent::query() ->where('active', true); } //...}
# Получение записи
Метод resolveItemQuery()
используется,
если требуется изменить запрос на получение записи из базы данных.
namespace App\MoonShine\Resources; use App\Models\Post;use Illuminate\Contracts\Database\Eloquent\Builder;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function resolveItemQuery(): Builder { return parent::resolveItemQuery() ->withTrashed(); } //...}
# Поиск
Метод searchQuery()
позволяет изменить запрос при поиске записей.
namespace App\MoonShine\Resources; use App\Models\Post;use Illuminate\Contracts\Database\Eloquent\Builder;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function searchQuery(): Builder { return parent::searchQuery() ->withTrashed(); } //...}
# Сортировка
Переопределив метод resolveOrder()
, можно кастомизировать сортировку записей.
namespace App\MoonShine\Resources; use App\Models\Post;use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... protected function resolveOrder(): static { if (($sort = request('sort')) && is_string($sort)) { $column = ltrim($sort, '-'); $direction = str_starts_with($sort, '-') ? 'desc' : 'asc'; if ($column === 'author') { $this->query() ->select('posts.*') ->leftJoin('users', 'users.id', '=', 'posts.author_id') ->orderBy('users.name', $direction); return $this; } } return parent::resolveOrder(); } //...}