【发布时间】:2018-04-16 08:50:24
【问题描述】:
我有实体 Channel 和 Post。 Channel 具有简单整数 id。 Post 具有由自己的 id 和 channel_id 组成的复合键。
我想在这些实体之间建立多对多关系(提及),这样一个Post 可能会提到很多Channels,而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' 映射无效:
多对多表“提及”的反向连接列必须包含目标实体的所有标识符列 'Domain\Telegram\Models\Post',但缺少 'channel_id'。
inverseJoinColumns 部分应如下所示:
inverseJoinColumns:
post_id:
referencedColumnName: id
post_channel_id:
referencedColumnName: channel_id
所以这种关系实际上与简单的多对多关系相同。
【问题讨论】:
标签: php symfony doctrine-orm composite-primary-key