有的时候,我们在开发的过程中需要连接多个数据库。
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配置多数据库的资料请关注其它相关文章!