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

吾爱主题 阅读:303 2022-11-23 13:56:00 评论:0

有的时候,我们在开发的过程中需要连接多个数据库。

Laravel框架中早已为我们想到了这样的需求。

配置很简单。

在根目录下的/config/database.php文件中配置:

Laravel中为我们提前预设了多种类型的数据库连接

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 '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数据库连接

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 '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

?
1 DB::connection( 'oracle' )->select( "SELECT * from  xxxxx WHERE XH = '{$personal_id}' AND XM = '{$name}'" )

2:使用laravel封装的数据库方法:

?
1 2 3 4 5 6 $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配置多数据库的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7156773436001124389

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容