Как интегрировать SearchFilter для поиска по нескольким свойствам сущностей, используя Api-Platform? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть 4 поля в таблице
ID |Имя |EAN |HAN

Это свойства одной из моих сущностей. Итак, как мне настроить сущность с помощью searchFilter, чтобы при поиске строки проверять ее во всех 4 столбцах и возвращать совпадающие результаты.

Например: - если я ищу "car", он будет совпадать в свойстве name и возвращать, но когда я наберу id, скажем "219", он будет совпадать в свойстве id и вернет меня соответственно.

Я хочу достичьэто с использованием только api-платформы, и мой проект находится в Symfony.

Таким образом, поиск должен искать во всех 4 полях и затем возвращать результат.

1 Ответ

0 голосов
/ 07 ноября 2019
@ApiFilter(SearchFilter::class, properties={
     "id"   : "exact",      
     "name" : "partial",
     "ean"  : "partial",
     "han"  : "partial"
  })

Ссылка будет: http://localhost:8000/api/car?id=219&name=xxx&ean=xxx&han=xxx

и в вашем ресурсе Api, если вы используете аннотацию @Groups для управления отображением данных, убедитесь, что вы разрешаете отображение данных в нормализации

 * @ApiResource(
 *   itemOperations={"GET"},
 *   collectionOperations={"GET"}
 *   normalizationContext = {
 *      "groups"={"read"}
 *   }
 * )





class Car implements UserInterface
{ 
    /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         * @Groups({"read"})
         */
        private $id;

       /**
         * xxxxxxx
         * @Groups({"read"})
         */
        private $name;

       /**
         * xxxxxxx
         * @Groups({"read"})
         */
        private $ean;

       /**
         * xxxxxxx
         * @Groups({"read"})
         */
        private $han;
...