Поддерживает ли доктрина составные ключи в таблицах соединения «многие ко многим»?

У меня есть лица Channel а также Post, Channel имеет простое целое число id, Post имеет составной ключ из собственного id а также channel_id,

Я хотел бы иметь отношения многих ко многим между этими объектами (упомянуть), чтобы один Post может быть, многие упоминали Channelс и Channel могут быть упомянуты многими Posts,

Вопрос в том, поддерживает ли это Доктрина, как мне реализовать такие отношения?

Domain\Telegram\Models\Channel:
type: entity
id:
id:
type: integer

fields:
name:
type: string
nullable: true

oneToMany:
posts:
targetEntity: Domain\Telegram\Models\Post
mappedBy: channelDomain\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’:

Столбцы обратного соединения в «упоминаниях» таблицы «многие ко многим» должны содержать ВСЕ столбцы идентификаторов целевого объекта.
‘Domain \ Telegram \ Models \ Post’, однако ‘channel_id’ отсутствует.

Раздел inverseJoinColumns должен выглядеть следующим образом:

    inverseJoinColumns:
post_id:
referencedColumnName: id
post_channel_id:
referencedColumnName: channel_id

Так что такого рода отношения практически такие же, как простые отношения «многие ко многим».

2

Решение

Да это возможно

Вам просто нужно указать, к какой таблице он присоединяется с groups элемент, а затем объект, на который он отображается. Для однонаправленных отношений схема будет выглядеть следующим образом:

Channel:
type: entity
manyToMany:
posts:
targetEntity: Post
joinTable:
name: posts_channels
joinColumns:
channel_id:
referencedColumnName: id
inverseJoinColumns:
post:
referencedColumnName: id

и для двунаправленных отношений, вам нужно будет добавить inversedBy элемент:

Channel:
type: entity
manyToMany:
posts:
targetEntity: Post
inversedBy: channels
joinTable:
name: posts_channels
joinColumns:
channel_id:
referencedColumnName: id
inverseJoinColumns:
post_id:
referencedColumnName: id

Post:
type: entity
manyToMany:
channels:
targetEntity: Channel
mappedBy: posts

Официальную документацию для этого можно найти Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector