You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel读写分离场景下如何检测SQL实际使用的读/写连接

检测Laravel查询实际使用读/写连接的方法

实现方案

Laravel的Connection实例提供的getPdo()方法会直接返回当前查询实际使用的PDO实例,将它和连接实例的pdo(写连接实例)、readPdo(读连接实例)做比对即可判断当前使用的连接类型。

修改监听代码如下即可打印连接类型:

DB::listen(function ($query) {
    // 获取当前实际使用的PDO实例
    $usedPdo = $query->connection->getPdo();
    
    if ($usedPdo === $query->connection->readPdo) {
        dump('当前查询使用【读连接】');
    } else {
        dump('当前查询使用【写连接】');
    }
});

// 测试读操作
$table = DB::table('table')->first();
// 测试写操作
DB::table('table')->insert(['col' => 'val']);
// 测试事务内的读操作
DB::transaction(function () {
    DB::table('table')->first();
});

附加校验方法

如果需要确认连接的实际信息,可以打印当前PDO的连接属性校验:

DB::listen(function ($query) {
    $usedPdo = $query->connection->getPdo();
    // 打印当前连接的状态信息,包含host等配置,可和你的读写库配置做比对
    dump('当前连接详情:' . $usedPdo->getAttribute(PDO::ATTR_CONNECTION_STATUS));
});

补充说明

Laravel读写分离的默认路由规则:

  • 普通读操作默认走读连接
  • 所有写操作默认走写连接
  • 开启事务后,事务内的所有读、写操作都会走写连接,避免脏读

内容的提问来源于stack exchange,提问作者Masood Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:27:05