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.作者投稿可能会经我们编辑修改或补充。