当前位置:首页 > 后端

Webman配合ThinkORM4.0自动分库

Z先生4小时前后端3

一、配置数据库链接

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,
];


分享给朋友:

相关文章

ThinkOrm4.0分表最佳实践

一、定义模型,并在模型init时自动建表<?php namespace database\model\tenant; use think\facade\Db;…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。