FastD MedooDB 是基于 Medoo 的数据库组件,提供简洁的数据库操作接口,支持多连接池管理和 FastD 框架集成。
- 🎯 基于 Medoo: 继承 Medoo 的所有功能,轻量且高效
- 🔗 连接池管理: 支持多数据库连接池,自动管理连接
- 🔌 多数据库支持: MySQL、PostgreSQL、SQLite、MariaDB、MSSQL 等
- 🚀 FastD 集成: 完美集成 FastD 框架,支持服务提供者
- ⚡ 自动重连: 连接断开时自动重连
- 🎨 简洁 API: 链式调用,简单易用
- PHP: >= 8.2
- 扩展:
- ext-pdo
- ext-pdo_mysql (MySQL)
- ext-pdo_sqlite (SQLite)
- 或其他需要的 PDO 驱动
- 依赖:
- catfan/medoo ^2.2
composer require fastd/medoodb<?php
use FastD\MedooDB\Database;
// 创建数据库连接
$database = new Database([
'type' => 'mysql',
'host' => 'localhost',
'database' => 'test',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8mb4',
'port' => 3306,
'prefix' => '',
]);
// 查询数据
$users = $database->select('users', '*');
// 条件查询
$users = $database->select('users', '*', [
'status' => 1,
'ORDER' => 'created_at DESC',
'LIMIT' => 10
]);
// 插入数据
$database->insert('users', [
'name' => 'John Doe',
'email' => 'john@example.com'
]);
// 更新数据
$database->update('users', [
'status' => 1
], [
'id' => 1
]);
// 删除数据
$database->delete('users', [
'status' => 0
]);<?php
use FastD\MedooDB\Database;
// 使用 SQLite 内存数据库
$database = new Database([
'type' => 'sqlite',
'database' => ':memory:',
'charset' => 'utf8',
]);
// 创建表
$database->query("CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL
)");
// 插入数据
$database->insert('users', [
'name' => 'Test User',
'email' => 'test@example.com'
]);
// 查询
$users = $database->select('users', '*');
print_r($users);<?php
use FastD\MedooDB\DatabasePool;
// 配置多个数据库连接
$config = [
'local' => [
'type' => 'mysql',
'host' => 'localhost',
'database' => 'app_db',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8mb4',
],
'analytics' => [
'type' => 'mysql',
'host' => 'analytics.example.com',
'database' => 'analytics_db',
'username' => 'reader',
'password' => 'reader_password',
'charset' => 'utf8mb4',
],
'cache' => [
'type' => 'sqlite',
'database' => '/path/to/cache.db',
],
];
// 创建连接池
$pool = new DatabasePool($config);
// 获取数据库连接
$localDb = $pool->getDatabase('local');
$users = $localDb->select('users', '*');
// 获取分析数据库连接
$analyticsDb = $pool->getDatabase('analytics');
$stats = $analyticsDb->select('stats', '*');
// 重新连接
$localDb = $pool->getDatabase('local', true);
// 初始化所有连接
$pool->initConnections();<?php
use FastD\Container\Container;
use FastD\MedooDB\ServiceProvider\DatabaseServiceProvider;
// 创建容器
$container = new Container();
// 配置数据库
$container->add('config', [
'database' => [
'local' => [
'type' => 'mysql',
'host' => 'localhost',
'database' => 'app_db',
'username' => 'root',
'password' => 'password',
],
],
]);
// 注册服务提供者
$serviceProvider = new DatabaseServiceProvider();
$serviceProvider->register($container);
// 使用数据库
$dbPool = $container->get('medoodb');
$database = $dbPool->getDatabase('local');
$users = $database->select('users', '*');<?php
use FastD\MedooDB\Database;
$database = new Database([
'type' => 'mysql',
'host' => 'localhost',
'database' => 'test',
'username' => 'root',
'password' => 'password',
]);
// WHERE 条件
$users = $database->select('users', '*', [
'AND' => [
'status' => 1,
'OR' => [
'role' => 'admin',
'role' => 'moderator'
]
]
]);
// JOIN 查询
$posts = $database->select('posts', [
'[>]users' => ['user_id' => 'id']
], [
'posts.id',
'posts.title',
'users.name',
'users.email'
]);
// 聚合查询
$count = $database->count('users', '*', [
'status' => 1
]);
$sum = $database->sum('orders', 'amount', [
'status' => 'completed'
]);
// 原生 SQL
$result = $database->query("SELECT * FROM users WHERE status = :status", [
':status' => 1
]);
// 事务处理
$database->action(function($database) {
$database->insert('users', [
'name' => 'John Doe',
'email' => 'john@example.com'
]);
$userId = $database->id();
$database->insert('profiles', [
'user_id' => $userId,
'bio' => 'Hello World'
]);
});<?php
use FastD\MedooDB\Database;
use PDO;
$database = new Database([
'type' => 'mysql',
'host' => 'localhost',
'database' => 'test',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8mb4',
'port' => 3306,
'prefix' => 'app_',
'option' => [
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
],
'command' => [
'SET SQL_MODE=ANSI_QUOTES'
]
]);FastD\MedooDB\Database- 数据库操作类(继承 Medoo)FastD\MedooDB\DatabasePool- 数据库连接池管理FastD\MedooDB\ServiceProvider\DatabaseServiceProvider- FastD 服务提供者FastD\MedooDB\Listener\BootedEventListener- 启动事件监听器
继承 Medoo 的所有方法:
select($table, $columns, $where)- 查询数据insert($table, $data)- 插入数据update($table, $data, $where)- 更新数据delete($table, $where)- 删除数据count($table, $where)- 计数query($sql, $map)- 执行原生 SQLaction($callback)- 事务处理reconnect()- 重新连接pdo- 获取 PDO 实例
getDatabase($key, $reconnect)- 获取数据库连接initConnections()- 初始化所有连接onCallback()- 回调事件(用于 Swoole 启动)
composer install
vendor/bin/phpunit测试使用 SQLite 内存数据库,无需配置真实数据库。
欢迎贡献代码、报告问题或提出建议!
- 🐛 报告问题
- 💡 提交功能建议
- 🔧 贡献代码和文档
- ⭐ Star 项目支持
MIT License