使用Laravel 5.0提出了这个问题。
我的项目的数据库设置包括1个写节点和多个只读副本(postgresql)。每次为任何查询启动连接时,例如:
php
<?php $user = \App\User::find(1); ?>
...与写节点建立连接。即使没有运行写入查询(包括set names 'utf8'
等),也会发生这种情况;将设置一个连接,但所有SELECT
查询都在读取副本上正确运行。
如果我不需要/使用它来进行只读请求,我该如何避免这种写连接?
答案 0 :(得分:0)
维护数据库连接有两个类:Illuminate/Database/DatabaseManager
和Illuminate/Database/Connectors/ConnectionFactory
。
当任何Laravel类想要使用数据库连接时,它会调用DatabaseManager::connection()
,最终通过ConnectionFactory::make()
请求实际连接。
您的问题在于此处,make()
进程的基础同时创建了“读取”和“写入”连接。所以总是建立'写'连接。这是ConnectionFactory
的行为。
所以最好的方法是在Laravel上打开一个问题,询问开发团队他们是否只想在实际需要的时候改进连接建立。
<强>编辑:强>
我刚发现你已经开了一个问题: - )