Here are tips for using this library in more edge-case ways.
The $driver->filter(Entity::class)
filter may be used outside of a
collection query. For instance, to create a Doctrine query for the average
of a field you can construct your query like this:
use ApiSkeletons\Doctrine\ORM\GraphQL\Filter\QueryBuilder as FilterQueryBuilder;
use ApiSkeletons\Doctrine\ORM\GraphQL\Types\Entity\EntityTypeContainer;
use Doctrine\ORM\EntityManager;
use GraphQL\Type\Definition\Type;
'average' => [
'type' => Type::float(),
'args' => [
'filter' => $driver->filter(Entity::class),
],
'resolve' => function ($root, array $args, $context, ResolveInfo $info) use ($driver) {
$entity = $driver->get(EntityTypeContainer::class)->get(Entity::class)
$filterQueryBuilder = new FilterQueryBuilder();
$queryBuilder = $driver->get(EntityManager::class)
->createQueryBuilder();
$queryBuilder
->select('AVG(entity.fieldName)')
->from(Entity::class, 'entity');
// The apply method requires a third parameter of the entity
$filterQueryBuilder->apply($args['filter'], $queryBuilder, $entity);
return $queryBuilder->getQuery()->getScalarResult();
}
],