W
W
web-care2022-04-06 16:09:48
MySQL
web-care, 2022-04-06 16:09:48

How to correctly write the config for setting up replication on laravel?

I have the following database config for laravel

<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'read' => [
                [
                    'host' => env('DB_SLAVE_HOST', '127.0.0.1'),
                    'port' => env('DB_SLAVE_PORT', '3306'),
                    'username'  => env('DB_SLAVE_USERNAME', 'slaveuser'),
                    'password'  => env('DB_SLAVE_PASSWORD', 'slavepassword'),
                ],
                [
                    'host' => env('DB_MASTER_HOST', '127.0.0.1'),
                    'port' => env('DB_MASTER_PORT', '3306'),
                    'username'  => env('DB_MASTER_USERNAME', 'masteruser'),
                    'password'  => env('DB_MASTER_PASSWORD', 'masterpassword'),
                ],
            ],
            'write' => [
                'host' => env('DB_MASTER_HOST', '127.0.0.1'),
                'port' => env('DB_MASTER_PORT', '3306'),
                'username'  => env('DB_MASTER_USERNAME', 'masteruser'),
                'password'  => env('DB_MASTER_PASSWORD', 'masterpassword'),
            ],
            'sticky' => true,
            'database' => env('DB_DATABASE', 'forge'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
        ],

    ],

];


When executing simple code using a model

$city = \App\Models\Cities::query()->where('kladr_id', '7700000000000')->first();
print_r($city);


an error occurs

Call to a member function connection() on null (0)
/home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1493
#0: Illuminate\Database\Eloquent\Model::resolveConnection(NULL)
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1459
#1: Illuminate\Database\Eloquent\Model-&gt;getConnection()
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1266
#2: Illuminate\Database\Eloquent\Model-&gt;newBaseQueryBuilder()
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1183
#3: Illuminate\Database\Eloquent\Model-&gt;newModelQuery()
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1219
#4: Illuminate\Database\Eloquent\Model-&gt;newQueryWithoutScopes()
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1172
#5: Illuminate\Database\Eloquent\Model-&gt;newQuery()
  /home/www/docs/zarina-ru/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1162
#6: Illuminate\Database\Eloquent\Model::query()
  /home/www/docs/zarina-ru/bitrix/modules/main/admin/php_command_line.php(138) : eval()'d code:1
#7: eval
  /home/www/docs/zarina-ru/bitrix/modules/main/admin/php_command_line.php:138
#8: require_once(string)
  /home/www/docs/zarina-ru/bitrix/admin/php_command_line.php:2


What is wrong in my config? I did not find an answer to my question in the official documentation.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question