Laravel 5.7如何通过主库执行原生查询获取最新数据?
回答:这种方式完全可行!
Absolutely, using DB::connection("mydb")->useWritePdo()->select("SELECT * from et_user") is a totally valid approach to run your raw report queries against the primary (write) PostgreSQL database in Laravel 5.7. Let me break down why this works and share some key details to keep in mind:
原理说明
Laravel的数据库连接系统原生支持读写分离逻辑。当你在连接实例上调用useWritePdo()方法时,会强制该连接切换到配置中write节点对应的主库PDO实例。
这个方法不仅适用于查询构建器,对原生SQL查询(比如select()、statement()等方法)同样生效。你的原生报表SQL会直接在主库执行,确保获取到最新数据——完全符合你不想修改现有查询逻辑的需求。
验证示例
结合你给出的数据库配置,运行:
DB::connection("mydb")->useWritePdo()->select("SELECT * from et_user");
这条语句会将查询路由到DB_HOST_WRITE配置的主机(默认是192.168.2.5),而非从库。你无需修改Jira工单提供的原生查询,就能直接获取最新数据。
注意事项
- 要确保在执行原生查询之前调用
useWritePdo(),这个方法会修改当前连接实例的状态,后续所有基于该实例的操作都会走主库。 - 如果需要批量执行多个原生查询,你可以复用调用过
useWritePdo()的连接实例:$primaryConn = DB::connection("mydb")->useWritePdo(); $users = $primaryConn->select("SELECT * from et_user"); $recentOrders = $primaryConn->select("SELECT * from et_orders where created_at > now() - interval '1 hour'"); - Laravel 5.7完全支持这个特性——
useWritePdo()从Laravel 5.5版本就已引入,在查询构建器和原生查询场景下表现一致。
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

