Doctrine能否使用generateModelsFromDb检测数据库中的n-m关系?

时间:2010-04-13 14:00:27

标签: php doctrine relationship auto-generate

当使用generateModelsFromDb生成模型时,Doctrine在关系表和基表之间建立一对多关系,而不是在基表本身之间生成nm关系。有没有办法让generateModelsFromDb检测到n-m关系?

1 个答案:

答案 0 :(得分:0)

您可以使用YAML进行数据库设计。如果你想建立一个N-M关系,你需要做这样的事情(它显示了一个傻瓜的例子,关于拥有多个拥有者和拥有超过狗的狗的狗)

---
options:
    type: INNODB
    collate: utf8_unicode_ci
    charset: utf8

Human:
    columns:
        id:
            type: integer(4)
            primary: true
            autoincrement: true
        name:
            type: varchar(64)
            notnull: true
        ...
        ...
    relations:
        Dogs:
            foreignAlias: Humans
            class: Dog
            ref_class: Human_Dogs
Dog:
    columns:
        id: 
            type: integer(4)
            autoincrement: true
            primary: true
        owner:
            type: varchar(64)
            notnull: true
        ...
        ...
    relations:
        Humans:
            foreignAlias: Dogs
            class: Human
            ref_class: Human_Dogs
Human_Dogs:
    columns: 
        human_id:
            type: int(4)
            primary: true
        dog_id: 
            type: int(4)
            primary: true
    relations:
        Human:
            foreignAlias: Human_Dogs
        Dog:
            foreignAlias: Human_Dogs

那将是file.yml,所以现在你可以从这个文件生成数据库了。您可以这样做的方式很大程度上取决于您正在使用的框架或程序。无论如何,在PHP + Doctrine中有一种简单的方法:

<?php 
$options = array(
      'packagesPrefix'  =>  'Plugin',
      'baseClassName'   =>  'MyDoctrineRecord',
      'suffix'          =>  '.php'
);

Doctrine_Core::generateModelsFromYaml('/path/to/file.yml', '/path/to/model', $options);
?>

使用正确的配置,您可以自动生成id字段。

在此链接中有一个教程 - &gt; Documentation

我希望这可以帮到你!