codifico/mysql-workbench-schema-exporter

该包已被弃用且不再维护。未建议替代包。

MySQL Workbench Schema Exporter

dev-master 2013-09-04 07:39 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:26:57 UTC


README

注意

此软件为实验性且尚未准备好用于生产。它只是一个概念验证。

先决条件

  • PHP 5.3+
  • 使用 Composer 安装依赖项

安装依赖项

要将定义的依赖项获取到您的本地项目中,只需运行 composer.pharinstall 命令。

$ php composer.phar install

什么是 MySQL Workbench Schema Exporter?

该应用程序旨在创建

从 MySQL Workbench 模型 (*.mwb) 创建模式文件。它受 mysql-workbench-doctrine-plugin 启发。

Doctrine 行为

为 Doctrine1 实现了对行为的支持。使用表中的注释字段。

{d:actAs}
  actAs:
    timestampable:
      [..]
{/d:actAs}

外键名称

要使用外键名称替换关系名称,请以外键名称开头为 "d:"。

命令行界面 (CLI)

有一个新的 CLI,名为 export.php,用于简化导出过程,您可以在 cli 文件夹下查看。CLI 具有在导出之前自定义导出配置的功能。默认情况下,CLI 应用程序将使用当前目录中的配置文件 export.json 来提供参数,如果找到它。要禁用此行为,请参阅下面的选项。

CLI 的语法

php cli/export.php [options] FILE [DEST]

其中

  • 选项:
    • --export=type,选择导出的结果,目前可用的类型
      • doctrine1-yaml,Doctrine 1.0 YAML 模式(默认)
      • doctrine2-yaml,Doctrine 2.0 YAML 模式
      • doctrine2-annotation,Doctrine 2.0 注解类
      • doctrine2-zf2inputfilterannotation,带有 Zend Framework 2 Inputfilter 配置的 Doctrine 2.0 注解类,填充和 getArrayCopy 方法。
      • propel1-xml,Propel XML 模式
      • zend-dbtable,Zend DbTable
      • zend-restcontroller,Zend Rest Controller
      • sencha-extjs3,Sencha ExtJS3 模型
      • sencha-extjs4,Sencha ExtJS4 模型
    • --config=file,从文件中读取导出参数(JSON格式)
    • --saveconfig,将导出参数保存到文件 export.json,之后可以作为 --config=file 的值使用
    • --list-exporter,显示所有可用的导出器
    • --no-auto-config,禁用自动配置文件查找
    • --zip,压缩结果
    • --help,显示用法(或抑制任何参数)
  • FILE,要导出的 mwb 文件
  • DEST,目标目录(可选),如果未指定,则假设为当前目录

示例用法

php cli/export.php --export=doctrine1-yaml example/data/test.mwb ./generated
php cli/export.php --zip example/data/test.mwb

doctrine2-annotation 的示例导出参数(JSON)

{
    "export": "doctrine2-annotation",
    "zip": false,
    "dir": "temp",
    "params": {
        "backupExistingFile": true,
        "skipPluralNameChecking": false,
        "enhanceManyToManyDetection": true,
        "bundleNamespace": "",
        "entityNamespace": "",
        "repositoryNamespace": "",
        "useAnnotationPrefix": "ORM\\",
        "useAutomaticRepository": true,
        "indentation": 4,
        "filename": "%entity%.%extension%",
        "quoteIdentifier": false
    }
}

导出器选项

常规选项

应用于所有格式化程序的常规选项。

  • 缩进

    生成代码的缩进大小。

  • useTabs

    使用制表符进行缩进而不是空格。设置此选项将忽略 indentation 选项

  • filename

    输出文件名格式,使用以下标记 %schema%%table%%entity%%extension% 允许文件名用上下文数据替换。默认是 %entity%.%extension%

  • skipPluralNameChecking

    跳过检查模型的复数名称,保持原样,对非英语表名很有用。默认是 false

  • backupExistingFile

    如果目标已存在,则在替换内容之前创建备份。默认是 true

  • enhanceManyToManyDetection

    如果启用,表之间的多对多关系将添加到生成的代码中。默认是 true

  • logToConsole

    如果启用,将日志输出到控制台。默认是 false

  • logFile

    如果指定,将日志输出到文件。如果此选项存在,则将忽略 logToConsole 选项。默认为空。

所有注释行为

  • {MwbExporter:external}true{/MwbExporter:external}(应用于表、视图)

    将表/视图标记为外部以跳过表/视图代码生成。对于 Doctrine,请使用 {d:external}true{/d:external} 代替。

Doctrine 1.0 选项列表

  • extendTableNameWithSchemaName

    在表名旁边包含模式名称。默认是 false

Doctrine 1.0 注释行为

  • {d:externalRelations}relation{/d:externalRelations}

  • {d:actAs}behavior{/d:actAs}

Doctrine 2.0 YAML 选项列表

  • useAutomaticRepository

    自动生成实体存储库类名称。

  • bundleNamespace

    实体类名称的全局命名空间前缀。

  • entityNamespace

    实体命名空间。默认是 Entity

  • repositoryNamespace

    实体存储库类名称的前缀命名空间。为此配置生效,必须将 useAutomaticRepository 设置为 true

  • extendTableNameWithSchemaName

    在表名旁边包含模式名称。默认是 false

Doctrine 2.0 注解选项列表

  • useAnnotationPrefix

    Doctrine 注解前缀。默认是 ORM\

  • useAutomaticRepository

    参见上方。

  • bundleNamespace

    参见上方。

  • entityNamespace

    参见上方。

  • repositoryNamespace

    参见上方。

  • skipGetterAndSetter

    不生成列的 getter 和 setter。默认是 false

  • generateEntitySerialization

    生成方法 __sleep() 以包括序列化实体时仅包含真实列。默认是 true

  • quoteIdentifier

    如果启用此选项,所有表名和列名都将使用反引号(`)引用。当表名或列名包含保留字时很有用。默认为 false

Doctrine 2.0 注释的注释行为

  • {d:bundleNamespace}AcmeBundle{/d:bundleNamespace} (应用于表)

    覆盖 bundleNamespace 选项。

  • {d:m2m}false{/d:m2m} (应用于表)

    MySQL Workbench 架构导出器会尝试自动猜测哪些表是多对多映射表,并且不会为这些表生成实体类。如果一个表包含正好两个指向不同表的 foreign key,并且这些表不是多对多映射表,则该表被视为映射表。

    有时这种猜测对你来说是不正确的。但您可以在表的注释中添加一个提示,表明它不是映射表。只需在表的注释中任何位置使用 "{d:m2m}false{/d:m2m}" 即可。

  • {d:unidirectional}true{/d:unidirectional} (应用于外键)

    默认情况下,所有外键都会导致双向关系。如果您只想有一个单向关系,请在外键的注释中添加一个标志。

  • {d:owningSide}true{/d:owningSide} (应用于外键)

    在一个双向多对多映射表中,关系的拥有方是随机选择的。如果您在 m2m 表的一个外键中添加此提示,您可以定义 Doctrine 的拥有方。

  • {d:cascade}persist, merge, remove, detach, all{/d:cascade} (应用于外键)

    您可以在外键的注释中指定 Doctrine 级联选项。这些将被生成到注解中。(参考

  • {d:fetch}EAGER{/d:fetch} (应用于外键)

    您可以在外键的注释中指定关系的获取类型。可以是 EAGER 或 LAZY(doctrine 默认为 LAZY)。

  • {d:orphanRemoval}true{/d:orphanRemoval} (应用于外键)

    您可以在外键的注释中设置另一个选项。(参考

Doctrine 2.0 注释 ZF2 Inputfilter 的附加选项列表

  • generateEntityPopulate
  • generateEntityGetArrayCopy

Propel Xml 的选项列表

  • namespace
  • addVendor

Zend DbTable 的选项列表

  • tablePrefix
  • parentTable
  • generateDRI
  • generateGetterSetter

Zend Rest Controller 的选项列表

  • tablePrefix
  • parentTable

Sencha ExtJS3 Model 的选项列表

  • classPrefix
  • parentClass

Sencha ExtJS4.2 Model 的选项列表

  • classPrefix
  • parentClass
  • generateValidation
  • generateProxy

要求

适用于 PHP 5.3 及以上版本。

链接

测试数据库

示例

<?php

// enable autoloading of classes
$libDir = __DIR__.'/lib';
require_once($libDir.'/MwbExporter/SplClassLoader.php');

$classLoader = new SplClassLoader();
$classLoader->setIncludePath($libDir);
$classLoader->register();

// create bootstrap
$bootstrap = new \MwbExporter\Bootstrap();

// define a formatter and do configuration
$formatter = $bootstrap->getFormatter('doctrine2-annotation');
$formatter->setup(array());

// specify the workbench document to load, output directory, and storage type (zip or file)
$mwbfile = 'myDatabaseModel.mwb';
$outDir = getcwd();
$storage = 'zip';
// load document and export
$document = $bootstrap->export($formatter, $mwbfile, $outDir, $storage);

// show the output
echo sprintf("Saved to %s.\n\n", $document->getWriter()->getStorage()->getResult());

?>