codifico / mysql-workbench-schema-exporter
MySQL Workbench Schema Exporter
Requires
- php: >=5.3.0
- doctrine/inflector: 1.0.*@dev
This package is not auto-updated.
Last update: 2022-02-01 12:26:57 UTC
README
注意
此软件为实验性且尚未准备好用于生产。它只是一个概念验证。
先决条件
- PHP 5.3+
- 使用 Composer 安装依赖项
安装依赖项
要将定义的依赖项获取到您的本地项目中,只需运行 composer.phar
的 install
命令。
$ php composer.phar install
什么是 MySQL Workbench Schema Exporter?
该应用程序旨在创建
- Doctrine 1.0 YAML 模式
- Doctrine 2.0 YAML 模式、注解类或带有 Zend Framework 2 输入过滤器支持 的注解类
- Zend DbTable
- Zend Rest Controller
- Sencha ExtJS3 Model
- Sencha ExtJS4 Model
- Propel XML 模式
- CakePHP (未实现)
从 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 DbTablezend-restcontroller
,Zend Rest Controllersencha-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());
?>