dlid/cdbyuml

使用 yuml.me 生成数据库模型的 PHP 类

v1.0 2014-10-11 15:25 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:33:45 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

Latest Stable Version Total Downloads Latest Unstable Version License

CDbYuml

CDbYuml 会根据您的 PDO sqlite 或 mysql 数据源创建类图,使用 yuml.me

  • 灵活,您可以使用您喜欢的数据库访问层
  • 易于使用现有的 PDO 连接(以下为示例)

由于您可以定义查询的执行方式,CDbYuml 可以与许多其他数据库库一起使用

  • CDbYuml 将使用您的回调函数来查询数据库的元数据
  • CDbYuml 将根据数据库元数据生成 Yuml 字符串
  • 将 Yuml 字符串发布到 yuml.me 并下载生成的图

版本

0.2

技术

CDbYuml 有以下要求

  • CURL - PHP 中必须启用客户端 URL 扩展
  • PHP - 已测试与 PHP 5.4 版本兼容

关于复杂图型的说明

对于非常大的数据库,这可能不是您想要的库。它已经与具有少量不同类型外键的简单数据库结构进行了测试。

如果生成的图不符合您的期望,您可以随时发送生成的文本,我会尝试找出使其兼容的方法。

选项

$cdbyuml->setOptions([
 'proxy'        =>   null,       // Proxy address
 'proxyauth'    =>   null,       // Proxy authentication (username:password)
 'query'        =>   null,       // \PDO Object or custom function to fetch data from database
 'sql_dialect'  =>  'sqlite',    // sqlite or mysql. Determines which queries to run
 'style'        =>  'plain',     // Yuml.me styles (plain, scruffy or nofunky)
 'scale'        =>  100,         // Yuml.me scale (100 = 100%) 
 'close'        =>  null,        // Optional callback function to close database
 'force'        =>  false,       // Ignore all caching.
 'cachepath'    =>  null,        // Full path to the cachefile
 'cachetime'    =>  '15 minutes' // Maximum time before re-validating database structure
]);

方法

  • setOptions ( $options ) - 配置库。参见上方选项
  • outputImage ( [$force = true] ) - 生成图并输出图像到浏览器
  • outputText ( [$force = true] ) - 输出包含调试信息的 HTML 页面
  • __construct ( $options ) - 配置库。与 setOptions 相同的参数

示例用法

以下示例创建了一个包含多个表的 sqlite 数据库。

然后使用 CDbYuml 生成表的图。

// Open a database connection
$dbh = new PDO('sqlite:mydatabase.sqlite3');

// Initialize CDBYuml
$cdbyuml = new \Dlid\DbYuml\CDbYuml();
$cdbyuml->setOptions([
   'sql_dialect' => 'sqlite',

    // Callback function query the database for metadata
    'query' => function($query, $parameters) use ($dbh) {
        // Pass along query and parameters to our open PDO connection
        $stmt = $dbh->prepare($query);
        $stmt->execute($parameters);
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
]);

// Fetch metadata from database and generate the YUml string
$cdbyuml->execute()
   #->outputText() // Uncomment to see debug information
   // Output the generated diagram
   ->outputImage();

其他方法

将 PDO 对象作为查询传递

您还可以将 PDO 对象作为第一个参数传递。其他选项可以使用第二个参数设置。

# Just the PDO:
$cdbyuml->setOptions($dbh);

# Some additional options
$cdbyuml->setOptions($dbh, [ 'proxy' => 'http://some-proxy.example.net:8080' ]);

注意:使用上述方法,您不能在第二个参数中传递 'query' 选项。然后将使用内部检索数据的函数

使用构造函数而不是 setOptions

最后,您也可以像 setOptions 一样使用构造函数

# Example passing just the PDO:
$cdbyuml = new \Dlid\DbYuml\CDbYuml([
 'query' => $dbh,
 'cachepath' => '/users/david/temp/cache/dbcache1'
]);

缓存

我建议对您的图进行缓存。如果您不这样做,则 CDbYuml 将每次都查询数据库的结构并从 yuml.me 下载新的图。请缓存,这样每个人都会很高兴!

$cdbyuml->setOptions([
 'cachefile' => '/somepath/db_diagram',
 'cachetime' => '5 minutes'
]);

在上面的示例中,如果您指定了 cachepathcachetime,将发生以下情况

  • Yuml 文本将被保存到文件 /somepath/db_diagram.cache
  • 下载的图像将被保存到文件 /somepath/db_diagram.png

当以下情况发生时,缓存将失效

  • 您更改了 'style' 参数
  • 您更改了 'scale' 参数
  • 缓存时间已过期(自上次写入 .cache 文件以来已过去五分钟)

如果 'style' 或 'scale' 发生更改,则将重新提取数据库结构并下载新的图

如果缓存时间过期,则将再次查询数据库的结构

  • 如果结构已更改,则将下载新的图
  • 否则将使用 /somepath/db_diagram.png 图像

##作曲家

您可以将 dlid/cdbyuml 添加到您的 composer.json 文件中,如下所示。

 "require": {
  "dlid/cdbyuml": "dev-master"
 }

许可协议

MIT