Doctrine 1.2用于多对多关系的列命名约定

时间:2010-06-17 17:14:40

标签: php mysql orm doctrine

我正在使用现有的数据库架构,并尝试设置两个具有多对多关系的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. 我的假设是否正确?

  2.   
  3. 如果是这样,Doctrine 2中的情况是否发生了变化?

  4.   
  5. 如果上述任何一个的答案都是真的,那么如何配置模型以便所有列“排列”

  6.   

2 个答案:

答案 0 :(得分:1)

您只需设置本地和外国部分以匹配您的列名

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:

答案 1 :(得分:1)

看看关于N:M关系的at the docs

当你看到

$this->hasColumn('user_id', 'integer', null, array(
                'primary' => true
            )
        );

从文档中,您会看到由您在连接模型中命名列的方式取决于您。

由于您有现有数据库,为什么不通过Doctrine生成模型API会向您显示所需的选项。我自己使用它,效果很好。有时你可能需要一些清理,如果你有一个完整的结构,但生成的文件是一个非常好的开始。