laravel(5.5) 操作多个数据库问题

问题:laravel5.5 使用ORM方式操作同一台MySQL机器上的多个DB时,如何优雅的设置链接?

laravel默认会链接env里配置的数据库,但是在不同的Model里我需要指定另一个数据库而不是使用这个evn里默认的;

查阅API手册后知,在Model里指定$connection即可,但是经过试验发现这个$connection的值 是需要在/config/database.php里新增一个array配置。

/config/database.php

//默认,会读取env里的mysql配置
'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,
        ],
        //自己新增的
        'introduction_processQualityReport' => [
            '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,
        ],

经过测试发现,自己新增的这个数据key必须和我想要在Model里单独指定使用的数据库名一样,否则就报错database not xxx 之类的。

问题1
新增的那个数组introduction_processQualityReport,个人感觉value里一大堆和默认的那个没啥区别,这样写有些累赘,不知道有没有别的更优雅的方式?(这2个数据库都是在同一台MySQL上)

阅读 3.5k
2 个回答

laravel 同一个项目操作多个数据库只能这样用,其实也没那么累赘。

我没有出现database配置里key必须为数据库名的问题,
database.php

'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,
    ],
    'mysql_main' => [
        'driver'    => 'mysql',
        'host'      => env('DB_MAIN_HOST', 'localhost'),
        'port'      => env('DB_MAIN_PORT', '3306'),
        'database'  => env('DB_MAIN_DATABASE', 'forge'),
        'username'  => env('DB_MAIN_USERNAME', 'forge'),
        'password'  => env('DB_MAIN_PASSWORD', ''),
        'charset'   => 'utf8mb4',
        'collation' => 'utf8mb4_bin',
        'prefix'    => '',
        'strict' => true,
    ],
    'mysql_uc' => [
        'driver'    => 'mysql',
        'host'      => env('DB_UC_HOST', 'localhost'),
        'port'      => env('DB_UC_PORT', '3306'),
        'database'  => env('DB_UC_DATABASE', 'forge'),
        'username'  => env('DB_UC_USERNAME', 'forge'),
        'password'  => env('DB_UC_PASSWORD', ''),
        'charset'   => 'utf8mb4',
        'collation' => 'utf8mb4_bin',
        'prefix'    => '',
        'strict' => true,
    ],

.env
图片描述

helpers.php定义是为了写表单验证直接指定连接时用的。

//
define('a_DATABASE_NAME', env('DB_DATABASE'));
//
define('b_DATABASE_NAME', env('DB_MAIN_DATABASE'));
//
define('c_DATABASE_NAME', env('DB_UC_DATABASE'));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题