You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:32:20