我遵循带注释的过滤器的实现,以仅加载一个用户关注的源。非常有用,可以正常工作。
https://api-platform.com/docs/core/filters/#using-doctrine-filters
但是:我想在我的实体中使用 ManyToMany 关系执行此操作,而不是像这样的ManyToOne:
<?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;
//...
}
由于现在有一个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_...
如何为ManyToMany做到这一点<=>如何传递良好的(联接)表+(联接)列??