本文目录导读:

我来介绍几种PHP数据库文档自动生成的方法和工具:
使用数据库文档生成工具
SchemaSpy(推荐)
最流行的数据库文档生成工具:
# 安装 brew install schemaspy # 生成文档 java -jar schemaspy.jar \ -t mysql \ -db database_name \ -host localhost \ -port 3306 \ -u root \ -p password \ -o ./docs
DBDoc
简单的PHP工具:
// 使用 DBDoc
composer require cytopia/dbdoc
// 配置
$dbConfig = [
'host' => 'localhost',
'database' => 'test_db',
'username' => 'root',
'password' => 'password'
];
$dbDoc = new DBDoc\DBDoc();
$dbDoc->generate($dbConfig, './docs');
Laravel专属工具
Laravel-DevTools
composer require --dev bavix/laravel-dev-tools php artisan make:database-documentation
Laravel-ER-Diagram
composer require --dev beyondcode/laravel-er-diagram-generator # 生成ER图 php artisan er:generate
自定义PHP脚本
基于PDO的文档生成器
<?php
class DatabaseDocumentGenerator
{
private $pdo;
public function __construct($host, $dbname, $user, $pass)
{
$this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
public function generateMarkdown()
{
$tables = $this->getTables();
$markdown = "# 数据库文档\n\n";
foreach ($tables as $table) {
$markdown .= "## {$table}\n\n";
$columns = $this->getColumns($table);
$markdown .= "| 字段 | 类型 | 是否为空 | 默认值 | 注释 |\n";
$markdown .= "|------|------|----------|--------|------|\n";
foreach ($columns as $col) {
$markdown .= "| {$col['Field']} | {$col['Type']} | ";
$markdown .= "{$col['Null']} | {$col['Default']} | ";
$markdown .= "{$col['Comment']} |\n";
}
$markdown .= "\n";
}
file_put_contents('database-doc.md', $markdown);
return $markdown;
}
private function getTables()
{
$stmt = $this->pdo->query("SHOW TABLES");
return $stmt->fetchAll(PDO::FETCH_COLUMN);
}
private function getColumns($table)
{
$stmt = $this->pdo->query("SHOW FULL COLUMNS FROM `$table`");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
// 使用
$doc = new DatabaseDocumentGenerator('localhost', 'test_db', 'root', 'password');
$doc->generateMarkdown();
使用ORM注释生成文档
DocBlock解析器
<?php
/**
* @Entity @Table(name="users")
**/
class User
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue
**/
protected $id;
/**
* @Column(type="string", length=100)
* @var string 用户名
**/
protected $username;
}
// 生成文档
class ORMDocGenerator
{
public function generate($entities)
{
$doc = "# ORM数据库文档\n\n";
foreach ($entities as $entity) {
$reflection = new ReflectionClass($entity);
$doc .= "## {$reflection->getShortName()}\n\n";
foreach ($reflection->getProperties() as $property) {
$docComment = $property->getDocComment();
preg_match('/@var\s+(\S+)\s+(.+)/', $docComment, $matches);
$doc .= "- **{$property->getName()}**: ";
$doc .= isset($matches[2]) ? $matches[2] : "无描述";
$doc .= " ({$matches[1]})\n";
}
$doc .= "\n";
}
file_put_contents('orm-doc.md', $doc);
return $doc;
}
}
集成到CI/CD
GitLab CI配置
generate-db-docs:
stage: deploy
script:
- composer install
- php artisan db:doc:generate
- cp docs/* public/docs/
artifacts:
paths:
- public/docs/
GitHub Actions
name: Generate DB Docs
on: [push]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: shogo82148/actions-setup-mysql@v1
- name: Generate docs
run: |
composer install
php generate-doc.php
- name: Deploy to Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs
推荐的完整解决方案
使用Adminer的导出功能
# 安装Adminer wget https://www.adminer.org/latest-en.php -O adminer.php # 访问 http://localhost/adminer.php # 选择导出 -> Database documentation
使用phpMyAdmin的文档生成
- 选择数据库
- 导出 -> 自定义
- 格式选择 "生成器" 或 "PDF"
在线工具
- DB Diagram (dbdiagram.io)
- QuickDBD (quickdatabasediagrams.com)
- Lucidchart
最佳实践
- 保持注释更新:确保数据库字段有comment
- 版本控制:将生成的文档纳入版本控制
- 自动化:集成到CI/CD流程中
- 多格式输出:同时生成HTML和Markdown格式
最简单的方案是使用 SchemaSpy,它生成HTML格式的专业文档,包含ER图、表关系等完整信息。