ModelResource

Запросы

Запросы

Часто необходимо изначально изменить все запросы ресурса к базе данных. Вы можете легко переопределить QueryBuilder в ресурсе.

 namespaces
namespace App\MoonShine\Resources;
 
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
// ...
 
protected function modifyQueryBuilder(Builder $builder): Builder
{
return $builder->where('active', true);
}
}

Если вам необходимо полностью переопределить Builder, то вы можете переопределить метод ресурса newQuery().

Получение записи

Метод modifyItemQueryBuilder() используется, если вам нужно модифицировать запрос для получения записи из базы данных.

 namespaces
namespace App\MoonShine\Resources;
 
use Illuminate\Contracts\Database\Eloquent\Builder;
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
// ...
 
protected function modifyItemQueryBuilder(Builder $builder): Builder
{
return $builder->withTrashed();
}
}

Если вам необходимо полностью переопределить Builder для получения записи, то вы можете переопределить метод ресурса findItem().

Eager load

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected array $with = ['user', 'categories'];
 
// ...
}

Метод searchQuery() позволяет изменить запрос при поиске записей.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
// ...
 
protected function searchQuery(string $terms): void
{
return parent::searchQuery($terms)->withTrashed();
}
}

Также вы можете полностью переопределить логику поиска.

protected function resolveSearch(string $terms, ?iterable $fullTextColumns = null): static
{
// Your logic
 
return $this;
}

Сортировка

Переопределив метод resolveOrder(), вы можете настроить сортировку записей.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
// ...
 
protected function resolveOrder(string $column, string $direction, ?Closure $callback): static
{
if ($callback instanceof Closure) {
$callback($this->newQuery(), $column, $direction);
} else {
$this->newQuery()->orderBy($column, $direction);
}
 
return $this;
}
}