gpt4 book ai didi

php - doctrine 是否支持多对多连接表中的复合键?

转载 作者:行者123 更新时间:2023-12-04 17:48:23 25 4
gpt4 key购买 nike

我有实体 ChannelPostChannel 具有简单的整数 idPost 具有由其自己的 idchannel_id 组成的复合键。

我想在这些实体(提及)之间建立多对多关系,这样一个 Post 可能有很多提及的 ChannelChannel 可能会被许多 帖子 提及。

问题是 - 如果 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 - The entity-class 'Domain\Telegram\Models\Channel' mapping is invalid:

The inverse join columns of the many-to-many table 'mentions' have to contain to ALL identifier columns of the target entity 'Domain\Telegram\Models\Post', however 'channel_id' are missing.

inverseJoinColumns 部分应该如下所示:

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

所以这种关系实际上与简单的多对多关系相同。

最佳答案

是的,这是可能的

您只需指定它与 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

可以找到这方面的官方文档here .

关于php - doctrine 是否支持多对多连接表中的复合键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47098866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com