Сбой фильтров API по умолчанию при обращении к вложенным свойствам связанных объектов - PullRequest
0 голосов
/ 05 апреля 2019

Я настраиваю серию классов ApiFilter из стека Api-платформы в приложении Symfony 4. Я обнаружил, что любые фильтры, использующие вложенное свойство из отношения сущности, не действуют. Пожалуйста, посмотрите мой пример кода ниже, буду очень признателен за любую помощь, почему он может не работать.

Я пытаюсь отфильтровать сущность:

<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiProperty;

/**
 * PostAuthor
 * @ApiResource()
 * @ORM\Table(name="POST_AUTHOR", indexes={@ORM\Index(name="IDX_CF3397D94A7000A0", columns={"IDENTITY_ID"})})
 * @ORM\Entity(repositoryClass="App\Repository\PostAuthorRepository")
 */
class PostAuthor
{
    /**
     * @var string
     *
     * @ORM\Column(name="USER_ID", type="string", length=255, nullable=false)
     * @ORM\Id
     */
    private $userId;

    /**
     * @var string
     *
     * @ORM\Column(name="USERNAME", type="string", length=255, nullable=false)
     */
    private $username;

И коллекция, которую я фильтрую:

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiFilter;
use Symfony\Component\Serializer\Annotation\Groups;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\NumericFilter;
use Doctrine\ORM\Mapping as ORM;

/**
 * PostHeader
 * @ORM\Table(name="POST_HEADER", indexes={@ORM\Index(name="IDX_1CEEE7D0B65E5FF8", columns={"EMOTION_REF_ID"}), @ORM\Index(name="IDX_1CEEE7D08AFAAB14", columns={"AUTHOR_ID"})})
 * @ORM\Entity(repositoryClass="App\Repository\PostHeaderRepository")
 * @ApiResource(
 *       normalizationContext={"groups"={"postheader:read"}},
 *       denormalizationContext={"groups"={"postheader:write"}},
 *    )
 * @ApiFilter(SearchFilter::class, properties={"author.userId": "partial", "author.username": "partial"})
 */
class PostHeader
{

 /**
     * @var PostAuthor
     *
     * @ORM\ManyToOne(targetEntity="PostAuthor")
     * @ORM\JoinColumns({@ORM\JoinColumn(name="AUTHOR_ID", referencedColumnName="USER_ID")})
     * @Groups({"postheader:read"})
     */
    private $author;

1 Ответ

0 голосов
/ 06 апреля 2019

Я просто тестирую новый проект с теми же классами, что и у вас, и он работает.Я могу отфильтровать по author.userId.Пожалуйста, дайте нам ваш запрос на тестирование.И сообщение об ошибке;).

...