Files
animethemes-server/app/Concerns/Actions/Http/Api/AggregatesFields.php
T
2025-07-24 01:22:29 -03:00

40 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Concerns\Actions\Http\Api;
use App\Http\Api\Field\Aggregate\AggregateField;
use App\Http\Api\Field\Field;
use App\Http\Api\Query\Query;
use App\Http\Api\Schema\Schema;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
trait AggregatesFields
{
/**
* Select aggregate fields for the query builder.
*/
public function withAggregates(Builder $builder, Query $query, Schema $schema): Builder
{
collect($schema->fields())
->filter(fn (Field $field) => $field instanceof AggregateField && $field->shouldAggregate($query))
->each(fn (AggregateField $selectedAggregate) => $selectedAggregate->with($query, $builder));
return $builder;
}
/**
* Load aggregate fields for the model.
*/
public function loadAggregates(Model $model, Query $query, Schema $schema): Model
{
collect($schema->fields())
->filter(fn (Field $field) => $field instanceof AggregateField && $field->shouldAggregate($query))
->each(fn (AggregateField $selectedAggregate) => $selectedAggregate->load($query, $model));
return $model;
}
}