У меня есть сущности Channel
и Post
. Channel
имеет простое целое число id
. Post
имеет составной ключ, состоящий из собственных id
и channel_id
.
Я хотел бы иметь отношение «многие ко многим» между этими сущностями (упоминание), чтобы у одного Post
могло быть много упомянутых Channel
, а Channel
могло быть упомянуто многими Posts
.
Вопрос в том, если это поддерживается Doctrine, как мне реализовать такие отношения?
Domain\Telegram\Models\Channel:
type: entity
id:
id:
type: integer
fields:
name:
type: string
nullable: true
oneToMany:
posts:
targetEntity: Domain\Telegram\Models\Post
mappedBy: channel
Domain\Telegram\Models\Post:
type: entity
id:
channel:
associationKey: true
id:
type: integer
manyToOne:
channel:
targetEntity: Domain\Telegram\Models\Channel
inversedBy: posts
Обновление и решение
Решение @WilliamPerron почти сработало. При использовании в текущем состоянии doctrine:schema:validate
возвращает ошибку:
[Mapping] FAIL — сопоставление класса сущностей 'Domain\Telegram\Models\Channel' недопустимо:
Столбцы обратного соединения таблицы «многие ко многим» «упоминания» должны содержать ВСЕ столбцы идентификаторов целевого объекта «Домен\Telegram\Models\Post», однако «channel_id» отсутствует.
Раздел inverseJoinColumns должен выглядеть так:
inverseJoinColumns:
post_id:
referencedColumnName: id
post_channel_id:
referencedColumnName: channel_id
Таким образом, этот тип отношений практически такой же, как и простые отношения «многие ко многим».