Doctrine 1.2 多对多关系的列命名约定
Posted
技术标签:
【中文标题】Doctrine 1.2 多对多关系的列命名约定【英文标题】:Doctrine 1.2 Column Naming Conventions for Many To Many Relationships 【发布时间】:2010-06-17 17:14:40 【问题描述】:我正在使用现有的数据库架构,并尝试设置两个具有多对多关系的 Doctrine 模型,as described in this document
从头开始创建表时,我可以轻松完成这项工作。但是,现有的连接表使用与 Doctrine 文档中描述的不同的命名约定。具体
Table 1
--------------------------------------------------
table_1_id
....other columns....
Table 2
--------------------------------------------------
table_2_id
....other columns....
Join Table
--------------------------------------------------
fktable1_id
fktable_2_id
基本上,以前的开发人员在所有外键前面都加上fk
。
从我看到的示例和一些简短的代码试验来看,Doctrine 1.2 要求连接表使用与其连接的表相同的列名
我的假设正确吗?
如果是,第二条教义的情况是否发生了变化?
如果以上任何一个的答案都是正确的,您如何配置模型以使所有列“对齐”
【问题讨论】:
【参考方案1】:查看at the docs 的 N:M 关系。
当你看时
$this->hasColumn('user_id', 'integer', null, array(
'primary' => true
)
);
从文档中可以看出,如何命名连接模型中的列取决于您自己。
既然你有一个现有的数据库,为什么不通过 Doctrine 生成模型? API 向您展示了所需的选项。我自己用过,效果很好。如果您有一个复杂的结构,有时您可能需要进行一些清理,但生成的文件是一个很好的开始。
【讨论】:
我确实从数据库中生成了我的模型,但它没有拾取关系。您是否需要将一个特殊选项传递给 generateModelsFromDb 方法来告诉教义对关系进行最佳猜测? 不,生成的时候应该没问题。您是否在应用程序中测试过生成的模型? 啊,我想我明白你的意思了。如果其他人不清楚,将数据库列名称别名为字段名称所需的学说可以解决问题 ($this->hasColumn('fksection_id as section_id')【参考方案2】:您只需设置本地和外部部分以匹配您的列名
Table1:
columns:
table_1_id: int
....
relations:
Table2:
foreignAlias: FromSecond
local: table_1_id
foreign: fktable1_id
refClass: JoinTable
Table2:
columns:
table_2_id: int
....
relations:
Table1:
foreignAlias: FromFirst
local: table_2_id
foreign: fktable2_id
refClass: JoinTable
JoinTable:
columns:
fktable1_id: int
fktable2_id: int
relations:
Table1:
Table2:
【讨论】:
我不会立即跳入 YAML 来避免整个“一次有太多新事物”的心理问题。以上生成了什么样的类/设置方法?以上是关于Doctrine 1.2 多对多关系的列命名约定的主要内容,如果未能解决你的问题,请参考以下文章
使用 Doctrine 和 Symfony2 查询多对多关系
如何避免与 Doctrine2 和 Zend Framework 2 的多对多关系重复?
在 symfony/doctrine 的 schema.yml 中,我应该在哪里放置 onDelete: CASCADE 用于多对多关系?