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);
    }
}

Этот код приводит к ошибке. Что именно за ошибка роли не играет. Доктрина в любом случае не понимает что от неё хотят. Можно ли сделать то что мне нужно?


Ответы (0 шт):