如何在Laravel中为多数据库创建Model实现便捷数据操作?
Laravel 多数据库连接与模型操作方案
1. 配置额外数据库连接
打开项目根目录下的 config/database.php,在connections数组中添加另外两个数据库的连接配置:
'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', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, ], // 第二个数据库(works表所在) 'mysql_works' => [ 'driver' => 'mysql', 'host' => env('DB_WORKS_HOST', '127.0.0.1'), 'port' => env('DB_WORKS_PORT', '3306'), 'database' => env('DB_WORKS_DATABASE', 'works_db'), 'username' => env('DB_WORKS_USERNAME', 'forge'), 'password' => env('DB_WORKS_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, ], // 第三个数据库(logics表所在) 'mysql_logics' => [ 'driver' => 'mysql', 'host' => env('DB_LOGICS_HOST', '127.0.0.1'), 'port' => env('DB_LOGICS_PORT', '3306'), 'database' => env('DB_LOGICS_DATABASE', 'logics_db'), 'username' => env('DB_LOGICS_USERNAME', 'forge'), 'password' => env('DB_LOGICS_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, ], ],
接着在.env文件中补充对应环境变量,避免硬编码敏感信息:
DB_WORKS_HOST=127.0.0.1 DB_WORKS_PORT=3306 DB_WORKS_DATABASE=你的第二个数据库名称 DB_WORKS_USERNAME=数据库用户名 DB_WORKS_PASSWORD=数据库密码 DB_LOGICS_HOST=127.0.0.1 DB_LOGICS_PORT=3306 DB_LOGICS_DATABASE=你的第三个数据库名称 DB_LOGICS_USERNAME=数据库用户名 DB_LOGICS_PASSWORD=数据库密码
2. 创建模型并指定连接
在app/Models目录下创建对应模型,显式指定数据库连接和关联表:
Work 模型(对应第二个数据库的works表)
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Work extends Model { // 指定使用的数据库连接 protected $connection = 'mysql_works'; // 指定关联表名(若模型名与表名符合Laravel复数约定可省略) protected $table = 'works'; // 若表无created_at/updated_at字段,需设置为false public $timestamps = false; }
Logic 模型(对应第三个数据库的logics表)
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Logic extends Model { protected $connection = 'mysql_logics'; protected $table = 'logics'; public $timestamps = false; }
3. 使用模型操作数据
完成配置后,即可像操作默认模型一样使用这两个模型:
// 获取works表第一条数据 $firstWork = \App\Models\Work::first(); // 获取logics表所有数据 $allLogics = \App\Models\Logic::get(); // 新增一条work记录 $work = new \App\Models\Work(); $work->title = '新作品标题'; $work->save(); // 更新logics表指定记录 \App\Models\Logic::where('id', 1)->update(['title' => '更新后的标题']);
额外注意事项
- 若后续需要给额外数据库执行迁移,可在迁移文件中指定连接:
Schema::connection('mysql_works')->create('works', function (Blueprint $table) { ... }); - 若表主键不是
id,或非自增整数,需在模型中调整$primaryKey和$incrementing属性 - 确保当前服务器有权限访问这两个额外数据库,且.env中的连接信息准确
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

