可主动调用db::disconnect()断开默认数据库连接,或指定连接名如db::disconnect('pgsql');必要时配合db::purge('mysql')彻底清除实例缓存,避免自动重连。

在 Laravel 命令行(Artisan 命令)中,数据库连接通常会在命令执行完毕后自动关闭,因为 PHP 进程结束时会释放所有资源。但如果你需要**主动断开当前连接**(比如避免长任务中连接超时、复用连接出错、或调试连接状态),可以通过以下方式手动关闭:
使用 DB::disconnect() 断开默认连接
这是最常用、最直接的方式,适用于大多数情况:
DB::disconnect();
它会关闭 config/database.php 中配置的默认数据库连接(通常是 'default' => 'mysql' 对应的连接)。你可以在命令的 handle() 方法末尾、或某个处理阶段后调用它。
断开指定名称的连接(如 'pgsql' 或 'tenant')
如果项目中配置了多个数据库连接,可显式指定连接名:
DB::disconnect('pgsql');
DB::disconnect('tenant');
这样只关闭对应连接,不影响其他连接实例。
确保连接真正释放(配合连接池/长生命周期场景)
在某些特殊场景(如自定义守护进程、协程环境、或反复重连的命令中),仅调用 disconnect() 可能不够。可进一步清空连接实例缓存:
- 调用
DB::purge('mysql');—— 彻底移除连接实例,下次DB::connection()会新建连接 - 如果用了查询构造器或 Eloquent 模型,注意它们内部也持有了连接引用;断开前建议避免后续数据库操作
- 不推荐手动操作 PDO 实例(如
DB::connection()->getPdo()->close();),Laravel 不保证该方法存在且安全
实际命令示例
在你的 Artisan 命令类中:
public function handle()
{
$this->info('开始处理...');
DB::table('logs')->insert(['message' => 'started']);
// 主动关闭连接
DB::disconnect();
$this->info('数据库连接已关闭');
}
注意:断开后不要再执行任何数据库操作,否则会触发自动重连(取决于配置),可能违背你“关闭”的初衷。











