A Laravel toolkit to handle for handling queries via a criteria pattern.
arielespinoza07/laravel-query-kit is a Laravel package for a laravel toolkit to handle for handling queries via a criteria pattern..
It currently has 0 GitHub stars and 3 downloads on Packagist (latest version v1.0.1).
Install it with composer require arielespinoza07/laravel-query-kit.
Discover more Laravel packages by arielespinoza07
or browse all Laravel packages to compare alternatives.
Last updated
Laravel Query Kit is a powerful criteria-based query builder toolkit. It's built with SOLID principles and easy to extend.
composer require arielespinoza07/laravel-query-kit
=, like, between, in, not in, etc.) and AND/OR logicbelongsTo, hasOne, hasMany, etc.), with dedicated handlersβββ src/
| βββ Console/
| | βββ Commands/
| | βββ stubs/
| βββ Contracts/
| βββ Criteria/
| | βββ Sort/
| βββ Exceptions/
| βββ Handlers/
| βββ Providers/
| βββ Service/
| βββ Support/
| | βββ Facades/
| βββ ValueObjects/
βββ tests/
use App\Models\User;
use LaravelQueryKit\Criteria\WhereFieldCriteria;
use LaravelQueryKit\Criteria\SortCriteria;
use LaravelQueryKit\Support\Facades\QueryKitBuilder;
$query = QueryKitBuilder::for(new User)
->withCriteria(
new WhereFieldCriteria('email', 'like', '%john.doe%'),
new SortCriteria('created_at', 'desc')->withDefaultSorts()
);
/** @var \Illuminate\Contracts\Database\Query\Builder $builder */
$builder = $query->builder();
/** @var \Illuminate\Database\Eloquent\Model|null $response */
$response = $query->toModel();
/** @var \Illuminate\Support\Collection $response */
$response = $query->toCollection();
/** @var \Illuminate\Pagination\LengthAwarePaginator $response */
$response = $query->withPagination(page: 1, perPage: 10)
->toPaginated();
use App\Http\Resources\UserResource;
/** @var \Illuminate\Http\Resources\JsonResource $response */
$response = $query->toJsonResource(UserResource::class);
use App\Http\Resources\UserCollection;
/** @var \Illuminate\Http\Resources\Json\ResourceCollection $response */
$response = $query->toResourceCollection(UserCollection::class);
use App\Http\Resources\UserCollection;
/** @var \Illuminate\Http\Resources\Json\ResourceCollection $response */
$response = $query->withPagination(page: 1, perPage: 10)
->toResourceCollection(UserCollection::class);
| Method | Handler |
|--------------------------|-----------------------------|
| toModel() | ModelHandler |
| toCollection() | CollectionHandler |
| toPaginated() | PaginatedHandler |
| toJsonResource() | JsonResourceHandler |
| toResourceCollection() | ResourceCollectionHandler |
WeekOrdersCriteriaphp artisan make:criteria WeekOrders
<?php
declare(strict_types=1);
namespace App\Criteria\Billing;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Support\Carbon;
use LaravelQueryKit\Contracts\CriteriaInterface;
final readonly class WeekOrdersCriteria implements CriteriaInterface
{
private Carbon $date;
public function __construct(
private string $column = 'created_at',
private string $boolean = 'and',
?string $date = null,
) {
$this->date = isset($date) ? Carbon::parse($date) : now();
}
public function apply(Builder $builder): Builder
{
$weekDays = [
$this->date->startOfWeek()->format('Y-m-d H:i:s'),
$this->date->endOfWeek()->format('Y-m-d H:i:s'),
];
return $builder->whereBetween(
column: $this->column,
values: $weekDays,
boolean: $this->boolean,
);
}
}
MonthBillingOrderByCriteriaphp artisan make:criteria Sort/MonthBilling -s
<?php
declare(strict_types=1);
namespace App\Criteria\Sort;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use LaravelQueryKit\Contracts\SortCriteriaInterface;
final readonly class MonthBillingOrderByCriteria implements SortCriteriaInterface
{
public function __construct() {}
/**
* {@inheritDoc}
*/
public function apply(Builder $builder, Model $model, Relation $relation, string $column, string $direction): Builder
{
// TODO: Implement apply() method.
return $builder;
}
/**
* {@inheritDoc}
*/
public function supports(Relation $relation): bool
{
// TODO: Implement supports() method.
return true;
}
}
composer test
See CONTRIBUTING for details.
See CHANGELOG for details.
Report vulnerabilities by email or private issues.