【问题标题】:API Platform search filtering on relations columnsAPI 平台搜索过滤关系列
【发布时间】:2021-11-06 02:25:35
【问题描述】:

我在 Symfony 有一个项目,我正在使用 Api 平台。

例如,我有两个实体:

class User
{
    /**
     * @ORM\Column(type="string")
     */
    privat $firstName;
    
     /**
     * @ORM\Column(type="string")
     */
    private $lastName;

     /**
     * @ORM\OneToMany(targetEntity=Book::class, mappedBy="user")
     */
    private $books;
}

class Book
{
     /**
     * @ORM\Column(type="string")
     */
    private $title;

     /**
     * @ORM\ManyToOne(targetEntity=Book::class, inversedBy="books")
     */
    private $user;
}

我想在许多列上启用搜索过滤器,例如(user.firstName、user.lastName 和 book.title)

所以当我写例如“莎士比亚”时,这应该在上述所有列中找到这个世界。

我找到了这个解决方案:filter query on multiple fields in single query

但它适用于一个表中的列,但我想过滤表中的许多列包括关系

【问题讨论】:

    标签: symfony doctrine-orm doctrine api-platform.com


    【解决方案1】:

    所以默认情况下,ApiPlatform 使用关系过滤器,为此您需要像这样定义过滤器:

     * @ApiFilter(SearchFilter::class, properties={
     *   "user.firstName": "ipartial"
     * })
    

    所以您只需要指定关系字段,在本例中为“用户”和字段。

    【讨论】:

    • 好的,但它适用于单列。但我想输入参数: ?search= Shakespeare 并且它会在列中找到该词:(user.firstName OR user.lastName OR book.title) 您的解决方案仅适用于列“firstName”
    • 不幸的是ApiPlatform默认不支持,所以你需要做一个自定义过滤器,你可以在另一个堆栈溢出线程中找到一个例子:stackoverflow.com/questions/60709951/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多