无法在只读事务中执行 INSERT - Laravel 读/写

Rod*_*ore 5 postgresql laravel-4

我正在尝试在 Laravel 4.2.6 中设置读/写连接,但我无法执行 INSERT,但我可以执行 UPDATE 和 DELETE 事务。我得到的消息是:

SQLSTATE[25006]: Read only sql transaction: 7 ERROR:  cannot execute INSERT in a read-only transaction
Run Code Online (Sandbox Code Playgroud)

数据库的配置是:

'connections' => [
    'pgsql' => [
        'read'     => [
            'host' => '192.168.22.10'
        ],
        'write'     => [
            'host' => '192.168.33.10'
        ],
        'driver'   => 'pgsql',
        'database' => 'simpo',
        'username' => 'postgres',
        'password' => 'xxx',
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ],
]
Run Code Online (Sandbox Code Playgroud)

我正在使用带有 2 个服务器(虚拟机)的 Postgres 9.3。复制工作正常,是一个简单的二进制或“热备”复制(主/从),其中备用机器只能进行读取操作。


编辑:

我使用查询构建器进行了测试,并且 INSERT 工作正常,但是 Eloquent 失败了。

我在想这可能是 Eloquent 模型中连接的一个 BUG 但不寻常的是唯一的 INSERT 操作失败了而不是 UPDATE OR DELETE,所以这让我认为这是一些只有在 INSERT 时才会发生的操作执行(也许使用生成的 ID?)

编辑2:

我终于注意到了这个问题。当 Laravel 尝试插入和获取行的 Id 时会发生错误。问题发生是因为框架调用了一个'select'方法,但是这个select执行并且“INSERT ...返回'ID'”,所以如果机器只能执行SELECT事务失败,因为这个SELECT带有一个INSERT。

我提出了一个拉取请求,我检查选择方法是否以“插入”操作开始,并根据它获得正确的连接 https://github.com/laravel/framework/pull/4914

Rod*_*ore 0

这个Bug终于被修复了,我相信从4.2.9版本开始应该不会有问题了。查看拉取请求的相同链接。