搜索

查看: 3186|回复: 11

[PHP] PHP laravel实现配置使用多数据库

[复制链接]
发表于 2023-5-4 17:06:55 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:06:55 3186 11 看全部
有的时候,我们在开发的过程中需要连接多个数据库。
Laravel框架中早已为我们想到了这样的需求。
配置很简单。
在根目录下的/config/database.php文件中配置:
Laravel中为我们提前预设了多种类型的数据库连接
  'connections' => [
  
        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],
  
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            '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' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
  
        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],
  
        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],
  
    ],
默认连接的是mysql配置,配置项是存储在根目录下的.env文件中的。
如果使用多数据连接,则只需要,根据你的数据库类型,在配置你需要的数据库连接就好了。
如下面所示:
我增加了一个mysql数据库连接和oracle数据库连接
'connections' => [
  
        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],
  
        // 本地数据库,存储本地数据
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'xxxxx'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', xxxx),
            'username' => env('DB_USERNAME', xxxx),
            'password' => env('DB_PASSWORD', xxxxxxx'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => false,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
  
        // 线上数据库,将本地数据,同步至线上数据
        'mysql_base' => [
            'driver' => 'mysql',
            'read' => [
                'host' => env('DB_HOST_BASE', 'xxxxx'),
            ],
            'write' => [
                'host' => env('DB_HOST_BASE', 'xxxxx')
            ],
            'port' => env('DB_PORT_BASE', xxxx),
            'database' => env('DB_DATABASE_BASE', xxxx),
            'username' => env('DB_USERNAME_BASE', xxxxxx),
            'password' => env('DB_PASSWORD_BASE', 'xxxxx'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
  
        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],
  
        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],
         // oracle 数据库连接
        'oracle' => [
            'driver' => 'oracle',
            'host' => '210.30.64.37',
            'port' => xxx,
            'database' => '',
            'service_name' => xxxxx,
            'username' => xxx_xxxx,
            'password' => xxxx_xxxx,
            'charset' => 'AL32UTF8',
            'prefix' => '',
        ]
  
    ],
我们在使用其余的数据库连接,如下方所示:
1:使用原生sql
DB::connection('oracle')->select("SELECT * from  xxxxx WHERE XH = '{$personal_id}' AND XM = '{$name}'")
2:使用laravel封装的数据库方法:
$userinfo = DB::connection('mysql_base')->table('user')
                                                ->where('personal_id', '=', $data['personal_id'])
                                                ->where('name', '=', $data['name'])
                                                ->where('school_id', '=', $data['school_id'])
                                                ->select('id', 'type', 'school_id', 'personal_id', 'name', 'email', 'ilab_user', 'ilab_pwd')
                                                ->first();
最后,还是强调一句,数据库连接相关的用户名,连接,密码之类的,一般还是写在.env文件中的,方便我们统一管理。
以上就是PHP laravel实现配置使用多数据库的详细内容,更多关于PHP laravel配置多数据库的资料请关注知鸟论坛其它相关文章!
发表于 2023-6-28 17:01:16 | 显示全部楼层
dxf17 2023-6-28 17:01:16 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
发表于 2023-6-28 23:42:48 | 显示全部楼层
风吹吹蛋蛋疼风w 2023-6-28 23:42:48 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
发表于 2023-6-29 01:24:52 | 显示全部楼层
123456865 2023-6-29 01:24:52 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
发表于 2023-6-29 09:48:00 | 显示全部楼层
米老鼠和蓝精鼠v 2023-6-29 09:48:00 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
发表于 2023-6-29 17:03:38 | 显示全部楼层
123456809 2023-6-29 17:03:38 看全部
这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
发表于 2023-6-29 18:51:50 | 显示全部楼层
无人岛屿颈 2023-6-29 18:51:50 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
发表于 2023-6-29 19:29:17 | 显示全部楼层
永远就三年疗 2023-6-29 19:29:17 看全部
我看不错噢 谢谢楼主!知鸟论坛越来越好!
发表于 2023-6-29 20:17:32 | 显示全部楼层
胡37 2023-6-29 20:17:32 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
发表于 2023-6-29 21:28:13 | 显示全部楼层
123456819 2023-6-29 21:28:13 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
  • 您可能感兴趣
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| 小黑屋| 知鸟论坛 |网站地图
本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表