Webman配合ThinkORM4.0自动分库
一、配置数据库链接
return [ 'default' => 'mysql', // 默认连接 'connections' => [ 'mysql' => [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'db1', // 默认数据库连接配置 'username' => 'root', 'password' => '', 'hostport' => '3306', 'params' => [], 'charset' => 'utf8mb4', ], 'database_1' => [ // 第二个数据库实例配置 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'db2', 'username' => 'root', 'password' => '', 'hostport' => '3306', 'params' => [], 'charset' => 'utf8mb4', ], // 更多数据库实例配置... ], ];
二、创建中间件
<?php
namespace App\Middleware;
use Webman\Http\Request;
use Webman\Http\Response;
class DatabaseShardingMiddleware
{
public function process(Request $request, Response $response, callable $next)
{
// 获取请求参数,根据参数决定分库逻辑
$userId = $request->param('user_id');
$databaseIndex = $userId % 4; // 假设有4个数据库实例
// 动态切换数据库连接
\think\facade\Db::connect("database_{$databaseIndex}");
// 继续处理请求
return $next($request, $response);
}
}三、使用中间件
return [ // 其他中间件... \App\Middleware\DatabaseShardingMiddleware::class, ];

