Часто необходимо изначально изменить все запросы ресурса к базе данных.
Вы можете легко переопределить QueryBuilder
в ресурсе.
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);
}
}
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);
}
}
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()
используется, если вам нужно модифицировать запрос для получения записи из базы данных.
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();
}
}
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();
}
}
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()
.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected array $with = ['user', 'categories'];
}
namespaces
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected array $with = ['user', 'categories'];
// ...
}
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected array $with = ['user', 'categories'];
// ...
}
Метод searchQuery()
позволяет изменить запрос при поиске записей.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected function searchQuery(string $terms): void
{
return parent::searchQuery($terms)->withTrashed();
}
}
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();
}
}
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
{
return $this;
}
protected function resolveSearch(string $terms, ?iterable $fullTextColumns = null): static
{
// Your logic
return $this;
}
protected function resolveSearch(string $terms, ?iterable $fullTextColumns = null): static
{
// Your logic
return $this;
}
Переопределив метод resolveOrder()
, вы можете настроить сортировку записей.
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;
}
}
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;
}
}
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;
}
}