鉴别器列可以成为 Doctrine2 中主键的一部分吗?

Tim*_*tle 5 php oop orm single-table-inheritance doctrine-orm

我在 Doctrine2 中使用单表继承来存储多个服务的 OAuth 凭据。我想使用服务的 id 作为主键;然而,这并不是所有服务中唯一的。

我已经将数据库设置为使用鉴别器列和服务的 id 作为主键,但是我找不到一种方法让 Doctrine 使用鉴别器列作为键(除了鉴别器列)。我正在使用 docblock 注释,如果我将鉴别器列添加为 @Id 字段,则会出现错误:

Duplicate definition of column...in a field or discriminator column mapping.
Run Code Online (Sandbox Code Playgroud)

如果我只将该字段定义为鉴别器列,则任何重叠的服务 ID 都会更新所有匹配的行。

无论如何要完成这项工作,除了使用自动生成的 it 值?

beb*_*lei 3

不能,鉴别器列不能用作主键的一部分。

顺便说一句,为什么这个用例需要 STI?您必须为您提供的每个 open-id 服务创建一个新类,这听起来很烦人:-)

  • 我也希望能够使用鉴别器作为 PK 的一部分:我有一个用例,其中一个表保存各种实体的翻译,我理想的 PK 是(语言代码、鉴别器、实体 ID)。同时,这3个字段上的自增PK+唯一键就可以了。 (2认同)