我正在从Symfony 4应用程序中的Api平台堆栈配置一系列ApiFilter类。我发现任何使用实体关系中的嵌套属性的过滤器均无效。请在下面查看我的示例代码,非常感谢您提供帮助,解释为什么它可能无法正常工作。
我要过滤的实体是:
<?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;
答案 0 :(得分:0)
我只是在与您具有相同类的新项目上进行测试,所以它可以工作。我可以按author.userId进行过滤。 请给我们您的测试要求。和错误消息;)。