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

2651 0
黑夜隐士 2022-11-6 08:30:29 | 显示全部楼层 |阅读模式
有的时候,我们在开发的过程中需要连接多个数据库。
Laravel框架中早已为我们想到了这样的需求。
配置很简单。
在根目录下的/config/database.php文件中配置:
Laravel中为我们提前预设了多种类型的数据库连接
  1.   'connections' => [
  2.         'sqlite' => [
  3.             'driver' => 'sqlite',
  4.             'url' => env('DATABASE_URL'),
  5.             'database' => env('DB_DATABASE', database_path('database.sqlite')),
  6.             'prefix' => '',
  7.             'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
  8.         ],
  9.         'mysql' => [
  10.             'driver' => 'mysql',
  11.             'url' => env('DATABASE_URL'),
  12.             'host' => env('DB_HOST', '127.0.0.1'),
  13.             'port' => env('DB_PORT', '3306'),
  14.             'database' => env('DB_DATABASE', 'forge'),
  15.             'username' => env('DB_USERNAME', 'forge'),
  16.             'password' => env('DB_PASSWORD', ''),
  17.             'unix_socket' => env('DB_SOCKET', ''),
  18.             'charset' => 'utf8mb4',
  19.             'collation' => 'utf8mb4_unicode_ci',
  20.             'prefix' => '',
  21.             'prefix_indexes' => true,
  22.             'strict' => true,
  23.             'engine' => null,
  24.             'options' => extension_loaded('pdo_mysql') ? array_filter([
  25.                 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
  26.             ]) : [],
  27.         ],
  28.         'pgsql' => [
  29.             'driver' => 'pgsql',
  30.             'url' => env('DATABASE_URL'),
  31.             'host' => env('DB_HOST', '127.0.0.1'),
  32.             'port' => env('DB_PORT', '5432'),
  33.             'database' => env('DB_DATABASE', 'forge'),
  34.             'username' => env('DB_USERNAME', 'forge'),
  35.             'password' => env('DB_PASSWORD', ''),
  36.             'charset' => 'utf8',
  37.             'prefix' => '',
  38.             'prefix_indexes' => true,
  39.             'schema' => 'public',
  40.             'sslmode' => 'prefer',
  41.         ],
  42.         'sqlsrv' => [
  43.             'driver' => 'sqlsrv',
  44.             'url' => env('DATABASE_URL'),
  45.             'host' => env('DB_HOST', 'localhost'),
  46.             'port' => env('DB_PORT', '1433'),
  47.             'database' => env('DB_DATABASE', 'forge'),
  48.             'username' => env('DB_USERNAME', 'forge'),
  49.             'password' => env('DB_PASSWORD', ''),
  50.             'charset' => 'utf8',
  51.             'prefix' => '',
  52.             'prefix_indexes' => true,
  53.         ],
  54.     ],
复制代码
默认连接的是mysql配置,配置项是存储在根目录下的.env文件中的。
如果使用多数据连接,则只需要,根据你的数据库类型,在配置你需要的数据库连接就好了。
如下面所示:
我增加了一个mysql数据库连接和oracle数据库连接
  1. 'connections' => [
  2.         'sqlite' => [
  3.             'driver' => 'sqlite',
  4.             'url' => env('DATABASE_URL'),
  5.             'database' => env('DB_DATABASE', database_path('database.sqlite')),
  6.             'prefix' => '',
  7.             'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
  8.         ],
  9.         // 本地数据库,存储本地数据
  10.         'mysql' => [
  11.             'driver' => 'mysql',
  12.             'url' => env('DATABASE_URL'),
  13.             'host' => env('DB_HOST', 'xxxxx'),
  14.             'port' => env('DB_PORT', '3306'),
  15.             'database' => env('DB_DATABASE', xxxx),
  16.             'username' => env('DB_USERNAME', xxxx),
  17.             'password' => env('DB_PASSWORD', xxxxxxx'),
  18.             'unix_socket' => env('DB_SOCKET', ''),
  19.             'charset' => 'utf8mb4',
  20.             'collation' => 'utf8mb4_unicode_ci',
  21.             'prefix' => '',
  22.             'prefix_indexes' => true,
  23.             'strict' => false,
  24.             'engine' => null,
  25.             'options' => extension_loaded('pdo_mysql') ? array_filter([
  26.                 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
  27.             ]) : [],
  28.         ],
  29.         // 线上数据库,将本地数据,同步至线上数据
  30.         'mysql_base' => [
  31.             'driver' => 'mysql',
  32.             'read' => [
  33.                 'host' => env('DB_HOST_BASE', 'xxxxx'),
  34.             ],
  35.             'write' => [
  36.                 'host' => env('DB_HOST_BASE', 'xxxxx')
  37.             ],
  38.             'port' => env('DB_PORT_BASE', xxxx),
  39.             'database' => env('DB_DATABASE_BASE', xxxx),
  40.             'username' => env('DB_USERNAME_BASE', xxxxxx),
  41.             'password' => env('DB_PASSWORD_BASE', 'xxxxx'),
  42.             'unix_socket' => env('DB_SOCKET', ''),
  43.             'charset' => 'utf8mb4',
  44.             'collation' => 'utf8mb4_unicode_ci',
  45.             'prefix' => '',
  46.             'strict' => false,
  47.             'engine' => null,
  48.         ],
  49.         'pgsql' => [
  50.             'driver' => 'pgsql',
  51.             'url' => env('DATABASE_URL'),
  52.             'host' => env('DB_HOST', '127.0.0.1'),
  53.             'port' => env('DB_PORT', '5432'),
  54.             'database' => env('DB_DATABASE', 'forge'),
  55.             'username' => env('DB_USERNAME', 'forge'),
  56.             'password' => env('DB_PASSWORD', ''),
  57.             'charset' => 'utf8',
  58.             'prefix' => '',
  59.             'prefix_indexes' => true,
  60.             'schema' => 'public',
  61.             'sslmode' => 'prefer',
  62.         ],
  63.         'sqlsrv' => [
  64.             'driver' => 'sqlsrv',
  65.             'url' => env('DATABASE_URL'),
  66.             'host' => env('DB_HOST', 'localhost'),
  67.             'port' => env('DB_PORT', '1433'),
  68.             'database' => env('DB_DATABASE', 'forge'),
  69.             'username' => env('DB_USERNAME', 'forge'),
  70.             'password' => env('DB_PASSWORD', ''),
  71.             'charset' => 'utf8',
  72.             'prefix' => '',
  73.             'prefix_indexes' => true,
  74.         ],
  75.          // oracle 数据库连接
  76.         'oracle' => [
  77.             'driver' => 'oracle',
  78.             'host' => '210.30.64.37',
  79.             'port' => xxx,
  80.             'database' => '',
  81.             'service_name' => xxxxx,
  82.             'username' => xxx_xxxx,
  83.             'password' => xxxx_xxxx,
  84.             'charset' => 'AL32UTF8',
  85.             'prefix' => '',
  86.         ]
  87.     ],
复制代码
我们在使用其余的数据库连接,如下方所示:
1:使用原生sql
  1. DB::connection('oracle')->select("SELECT * from  xxxxx WHERE XH = '{$personal_id}' AND XM = '{$name}'")
复制代码
2:使用laravel封装的数据库方法:
  1. $userinfo = DB::connection('mysql_base')->table('user')
  2.                                                 ->where('personal_id', '=', $data['personal_id'])
  3.                                                 ->where('name', '=', $data['name'])
  4.                                                 ->where('school_id', '=', $data['school_id'])
  5.                                                 ->select('id', 'type', 'school_id', 'personal_id', 'name', 'email', 'ilab_user', 'ilab_pwd')
  6.                                                 ->first();
复制代码
最后,还是强调一句,数据库连接相关的用户名,连接,密码之类的,一般还是写在.env文件中的,方便我们统一管理。
以上就是PHP laravel实现配置使用多数据库的详细内容,更多关于PHP laravel配置多数据库的资料请关注中国红客联盟其它相关文章!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行