Проблемы с указанием Laravel Eloquent базы данных во время выполнения - PullRequest
1 голос
/ 29 апреля 2020

Laravel 5,8. Я пытаюсь сохранить модель Eloquent, выбирая соединение с базой данных во время выполнения:

$catModel = new Cat;
if (env('USE_STAGING')) {
    $catModel->setConnection('staging');
}
$cat = $catModel::create(['name' => $request->name]);

Мой config/database.php файл:

'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
    'staging' => [
        'driver' => 'mysql',
        'host' => env('STAGING_DB_HOST', '127.0.0.1'),
        'port' => env('STAGING_DB_PORT', '3306'),
        'database' => env('STAGING_DB_DATABASE', 'forge'),
        'username' => env('STAGING_DB_USERNAME', 'forge'),
        'password' => env('STAGING_DB_PASSWORD', ''),
        'unix_socket' => env('STAGING_DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
],

Моя проблема в том, что каждый раз, когда я запускаю этот код cat создается в базе данных mysql (по умолчанию), а не в базе данных staging, даже если USE_STAGING равно true.

1 Ответ

0 голосов
/ 29 апреля 2020

Проблема заключается в вызове stati c метода create().

При изменении $catModel::create() на $catModel->create() необходимо использовать правильное соединение:

$catModel = new Cat;

if (env('USE_STAGING')) {
    $catModel->setConnection('staging');
}

$cat = $catModel->create(['name' => $request->name]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...