多对多的 Api 平台过滤器注释

mBb*_*bkr 5 php symfony api-platform.com symfony4

我遵循带注释的过滤器的实现,只加载一个用户关注的源。非常有用,正常工作。

https://api-platform.com/docs/core/filters/#using-doctrine-filters

但是:我想在我的实体中用多对多关系做同样的事情,而不是像这样的多对一:

<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use App\Annotation\UserAware;

/**
 *
 * @ApiResource(routePrefix="/api")
 * @ORM\Entity
 * @ORM\Table(name="albums")
 * @UserAware(userFieldName="user_owner")
 * @UserAware(userFieldName="album_access_user")
 */
class Album
{
    //...

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(nullable=false, name="user_owner", referencedColumnName="id")
    */
    public $userOwner;

    /**
     * @ORM\ManyToMany(targetEntity="User", inversedBy="albums")
     * @ORM\JoinTable(name="album_access")
     * @ORM\JoinTable(
     *  name="album_access",
     *  joinColumns={
     *      @ORM\JoinColumn(name="album_access_album", referencedColumnName="id")
     *  },
     *  inverseJoinColumns={
     *      @ORM\JoinColumn(name="album_access_user", referencedColumnName="id")
     *  }
     * )
    */
    private $accesses;

    //...
}
Run Code Online (Sandbox Code Playgroud)

由于现在有一个 JoinTable 而不仅仅是一个 JoinColum,我必须调整 UserFilterConfigurator.php 事件,但我不知道如何做到这一点来给他表而不是列......

这是我得到的逻辑错误,因为我现在要求实体表而不是连接表:

An exception occurred while executing 'SELECT DISTINCT o0_.id AS id_0, o0_.id AS id_1 FROM albums o0_ WHERE (o0_.album_access_user = '4') ORDER BY o0_.id ASC LIMIT 30':\n\nSQLSTATE[42703]: Undefined column: 7 ERROR:  column o0_.album_access_user does not exist\nLINE 1: ...id_0, o0_.id AS id_1 FROM albums o0_ WHERE (o0_...
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到 ManyToMany <=> 我怎样才能通过好的 (join)table + (join) 列?