Doctrine: критерии для связей many-to-many
Есть две модели чтения MerchantReadModel и TerminalReadModel. Между ними отношение many-to-many.
#[Entity, Table(name: 'merchants')]
class MerchantReadModel
{
#[Id, Column(type: 'string')]
public string $id;
#[ManyToMany(targetEntity: TerminalReadModel::class)]
#[JoinTable(name: 'merchants_terminals')]
#[JoinColumn(name: 'merchant_id', referencedColumnName: 'id')]
#[InverseJoinColumn(name: 'terminal_id', referencedColumnName: 'id')]
public Collection $terminals;
}
#[Entity, Table(name: 'terminals')]
class TerminalReadModel
{
#[Id, Column(type: 'integer')]
public int $id;
#[ManyToMany(targetEntity: MerchantReadModel::class)]
#[JoinTable(name: 'merchants_terminals')]
#[JoinColumn(name: 'terminal_id', referencedColumnName: 'id')]
#[InverseJoinColumn(name: 'merchant_id', referencedColumnName: 'id')]
public Collection $merchants;
}
Помимо них есть репозиторий, из которого хочу получить конкретный терминал, зная его айди, а также айди мерчанта, связь с которым должна присутствовать у этого терминала. Да, поиск можно сделать только по айди терминала, но в данном контексте важно чтоб терминал обязательно имел связь.
class TerminalReadRepository extends ServiceEntityRepository implements TerminalReadRepositoryInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, TerminalReadModel::class);
}
public function getById(int $terminalId, string $merchantId): Terminal
{
$result = $this->findOneBy(['id' => $terminalId, 'merchant' => $merchantId]);
if ($result instanceof TerminalReadModel) {
$dto = new TerminalReadDTO($result);
return $dto->toDomain();
}
throw new EmptyQueryResultException($terminalId, TerminalReadModel::class);
}
}
Этот код приводит к ошибке. Что именно за ошибка роли не играет. Доктрина в любом случае не понимает что от неё хотят. Можно ли сделать то что мне нужно?