Files
laravel-backend/app/Services/QueryBuilderService.php
Joris Slagter df155bb13d
Some checks failed
continuous-integration/drone/push Build is failing
Initial Laravel API import
- Complete GGZ Ecademy Laravel backend application
- RESTful API for learning products, members, filters
- Authentication and authorization system
- Database migrations and seeders
- Custom CRUD generator commands
- Email notification system
- Integration with frontend applications
2025-12-02 17:40:21 +01:00

62 lines
1.7 KiB
PHP

<?php
namespace App\Services;
use App\Repositories\QueryBuilder\Config as QueryBuilderConfig;
use App\Repositories\QueryBuilder\ConfigProvider as QueryBuilderConfigProvider;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Http\Request;
use Spatie\QueryBuilder\QueryBuilder;
use Webmozart\Assert\Assert;
class QueryBuilderService
{
/**
* @param EloquentBuilder|Relation|string $subject
* @param string|QueryBuilderConfigProvider|null $configProvider
* @param Request|null $request
* @return QueryBuilder
*/
public function createQueryBuilder(
$subject,
$builderConfigProvider = null,
Request $request = null
): QueryBuilder
{
$builder = QueryBuilder::for($subject, $request);
if ($builderConfigProvider) {
Assert::isAOf(
$builderConfigProvider,
QueryBuilderConfigProvider::class
);
$this->applyQueryBuilderConfig(
$builder,
$builderConfigProvider::getQueryBuilderConfig(),
);
}
return $builder;
}
private function applyQueryBuilderConfig(
QueryBuilder $builder,
QueryBuilderConfig $config
): void
{
$allowedFields = $config->getAllowedFields();
if (count($allowedFields)) {
$builder->allowedFields($allowedFields);
}
$builder->allowedAppends($config->getAllowedAppends());
$builder->allowedFilters($config->getAllowedFilters());
$builder->allowedIncludes($config->getAllowedIncludes());
$builder->allowedSorts($config->getAllowedSorts());
}
}