【问题标题】:Problems specifying Laravel Eloquent database at runtime在运行时指定 Laravel Eloquent 数据库的问题
【发布时间】:2020-04-29 08:38:56
【问题描述】:

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_STAGINGtrue

【问题讨论】:

  • 你不应该在配置文件之外调用env(),如果你缓存你的配置,它会返回null,你确定你真的输入了if语句吗?
  • @Remul 很高兴知道。但是是的,在这种情况下,我输入了if 语句。

标签: php mysql database laravel eloquent


【解决方案1】:

问题在于create()方法的静态调用。

通过将$catModel::create() 更改为$catModel->create(),它应该使用正确的连接:

$catModel = new Cat;

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

$cat = $catModel->create(['name' => $request->name]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 2020-11-24
    • 2019-03-30
    • 1970-01-01
    • 2020-08-19
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多