php - 在运行时指定 Laravel Eloquent 数据库的问题
问题描述
拉拉维尔 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
.
解决方案
问题是create()
方法的静态调用。
通过更改$catModel::create()
它$catModel->create()
应该使用正确的连接:
$catModel = new Cat;
if (env('USE_STAGING')) {
$catModel->setConnection('staging');
}
$cat = $catModel->create(['name' => $request->name]);
推荐阅读
- java - 如何计算 2 的 N 次方,其中 N 是一个非常大的数字
- node.js - 如何在运行 gulp build 命令时修复未关闭的块 SCSS 错误
- reactjs - 我无法使用纱线构建它
- python - 如何在脚本运行时将更多项目添加到多处理队列
- google-apps-script - 如何将 Range[ ] 转换为整数/类值?
- contiki - 如何向自己发送 runicast 消息?
- javascript - 将线性渐变与动态背景图像相结合
- c# - Roslyn Analyzer - 访问 ITextBuffer
- ios - 是否可以在 Linux 上运行 Azure 管道代理来构建 iOS 应用程序?
- react-native - 尝试使用 eval() 函数设置状态(React Native)