-
-
Notifications
You must be signed in to change notification settings - Fork 927
Description
API Platform version(s) affected: 3.1.13
Description
This PR (#5623) breaks our test suite because no where query is added to doctrine.
How to reproduce
The classes below should describe the issue. We are using uuids in API request and internal it uses ids.
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Uid\Uuid;
#[ApiResource(
operations: [
new GetCollection(),
new Get(),
],
)]
#[ApiFilter(SearchFilter::class, properties: ['groups' => 'exact'])]
#[ORM\Entity]
class User
{
#[ApiProperty(readable: false, writable: false, identifier: false)]
#[ORM\Id]
#[ORM\Column(type: 'integer')]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private int $id;
#[ApiProperty(writable: false, identifier: true)]
#[ORM\Column(type: 'uuid', unique: true)]
private Uuid $uuid;
#[ORM\ManyToMany(targetEntity: Group::class, inversedBy: 'users')]
#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')]
#[ORM\InverseJoinColumn(name: 'group_id', referencedColumnName: 'id')]
private Collection $groups;
public function __construct()
{
$this->uuid = Uuid::v4();
$this->groups = new ArrayCollection();
}
}
---
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Symfony\Component\Uid\Uuid;
#[ApiResource(
operations: [
new GetCollection(),
new Get(),
],
)]
#[ORM\Entity]
class Group
{
#[ApiProperty(readable: false, writable: false, identifier: false)]
#[ORM\Id]
#[ORM\Column(type: 'integer')]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private int $id;
#[ApiProperty(writable: false, identifier: true)]
#[ORM\Column(type: 'uuid', unique: true)]
private Uuid $uuid;
public function __construct()
{
$this->uuid = Uuid::v4();
}
}
The request we execute is "/api/v2/users?groups=/api/v2/groups/61817181-0ecc-42fb-a6e7-d97f2ddcb344"
Line https://github.com/api-platform/core/blob/main/src/Doctrine/Common/Filter/SearchFilterTrait.php#L133 now returns the uuid "61817181-0ecc-42fb-a6e7-d97f2ddcb344" and before we get the internal id value from https://github.com/api-platform/core/blob/main/src/Doctrine/Common/Filter/SearchFilterTrait.php#L128
This line https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Filter/SearchFilter.php#L225 returns the id field and will now return in this line https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Filter/SearchFilter.php#L233. So the where query (https://github.com/api-platform/core/blob/main/src/Doctrine/Orm/Filter/SearchFilter.php#L243) is not added anymore.
Possible Solution
Additional Context