起こった問題

タイトルの通り、Laravelで使用するDBのhostをRead/Weiteで切り替えたい、と思って設定をしていました。
設定後下記を確認して、

>>> config('database.connections.pgsql')
=> [
     "read" => [
       "host" => [
         "postgres2",
       ],
     ],
     "write" => [
       "host" => "postgres",
     ],
    ...

反映されてるな、と思って念の為connectionも見てみました。

>>> DB::connection('pgsql::read')->getConfig();
=> [
    ...,
     "host" => "postgres",
   ]

……あれ?

Readコネクションなのでpostgres2であって欲しいのに、postgresが出てきてしまいました。
反映されてないのかな?と思い色々調べたので、備忘録として置いて起きます。

調べたこと

getConfigで参照されるconfigは、
Illuminate\Database\Connectors\ConnectionFactory::make内で、

    /**
     * Establish a PDO connection based on the configuration.
     *
     * @param  array  $config
     * @param  string|null  $name
     * @return \Illuminate\Database\Connection
     */
    public function make(array $config, $name = null)
    {
        $config = $this->parseConfig($config, $name);

        if (isset($config['read'])) {
            return $this->createReadWriteConnection($config);
        }

        return $this->createSingleConnection($config);
    }

createReadWriteConnectionが呼び出され、

    /**
     * Create a read / write database connection instance.
     *
     * @param  array  $config
     * @return \Illuminate\Database\Connection
     */
    protected function createReadWriteConnection(array $config)
    {
        $connection = $this->createSingleConnection($this->getWriteConfig($config));

        return $connection->setReadPdo($this->createReadPdo($config));
    }

その中でwrite用のconfigがセットされてるので、どう呼び出してもwriterのconfigが見える、というオチでした。

まとめ

ReadとWriteでconnectionインスタンスが切り替わってるわけではなさそうで、「Readコネクションの向き先が正しく設定できているかどうか」はDB::connection('pgsql::read')->getConfig();ではわからない、ということがわかりました。

そのため、config('database.connections.pgsql')で確認できるhostが分かれていればヨシ!