فهرست منبع

ajout du custom filter fullName

Vincent GUFFON 4 سال پیش
والد
کامیت
079172f1bd
1فایلهای تغییر یافته به همراه36 افزوده شده و 0 حذف شده
  1. 36 0
      src/Filter/Person/FullNameFilter.php

+ 36 - 0
src/Filter/Person/FullNameFilter.php

@@ -0,0 +1,36 @@
+<?php
+declare(strict_types=1);
+
+namespace App\Filter\Person;
+
+use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\AbstractFilter;
+use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
+use Doctrine\ORM\QueryBuilder;
+
+class FullNameFilter extends AbstractFilter{
+    protected function filterProperty(string $property, $value, QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
+    {
+        if ($property !== 'fullname') {
+            return;
+        }
+        $alias = $queryBuilder->getRootAliases()[0];
+        $queryBuilder
+            ->innerJoin(sprintf('%s.person', $alias), 'person')
+            ->andWhere(sprintf('person.name LIKE :search OR person.givenName LIKE :search', $alias, $alias))
+            ->setParameter('search', '%'.$value.'%');
+    }
+
+    public function getDescription(string $resourceClass): array
+    {
+        return [
+            'fullname' => [
+                'property' => null,
+                'type' => 'string',
+                'required' => false,
+                'openapi' => [
+                    'description' => 'Recherche dans parmi les champs name et givenName',
+                ],
+            ]
+        ];
+    }
+}