Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用laravel多数据库?_Php_Database_Laravel - Fatal编程技术网

Php 如何使用laravel多数据库?

Php 如何使用laravel多数据库?,php,database,laravel,Php,Database,Laravel,我想知道关于laravel多个数据库的情况。是否可以使用默认数据库,该数据库只使用用户登录,登录后,一组一组地分开,每个组使用独立的数据库。例如,“db”是默认数据库,它仅用于所有用户登录 示例:现在'John'使用默认数据库'db'登录。John在登录后是group1的成员John使用'db1'存储了John的所有类型的数据。另一方现在使用默认数据库登录。Alex在登录后是group2的成员Alex使用'db2'存储所有类型的数据。登录后,无需使用默认数据库连接,因此我想将“bd”替换为“db

我想知道关于laravel多个数据库的情况。是否可以使用默认数据库,该数据库只使用用户登录,登录后,一组一组地分开,每个组使用独立的数据库。例如,
“db”
是默认数据库,它仅用于所有用户登录


示例:现在
'John'
使用默认数据库
'db'
登录。John在登录后是group1的成员John使用
'db1'
存储了John的所有类型的数据。另一方现在使用默认数据库登录。Alex在登录后是group2的成员Alex使用
'db2'
存储所有类型的数据。登录后,无需使用默认数据库连接,因此我想将“bd”替换为“db1”,或将“db”替换为“db2”。请提供laravel的代码

config/database.php
中定义一个单独的数据库连接

'mysql' => [ // default
    'driver' => 'mysql',
    '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', ''),
    ...
],
'db1' => [ // another 
    'driver' => 'mysql',
    'host' => env('DB_HOST_ONE', '127.0.0.1'),
    'port' => env('DB_PORT_ONE', '3306'),
    'database' => env('DB_DATABASE_ONE', 'forge'),
    'username' => env('DB_USERNAME_ONE', 'forge'),
    'password' => env('DB_PASSWORD_ONE', ''),
    ...
]
注意必须在
.env
中定义相应的配置

然后,当您想使用
db1
连接它时,请使用
Config::set('database.default','db1')
。但是,只有当您知道数据库连接的数量(您可以在
config/database.php
中定义)时,它才起作用。如果您有未知数量的数据库,那么您应该直接更改配置,而不是只更改连接的名称

例如:

Config::set('database.connections.mysql.database', 'db1')
Config::set('database.connections.mysql.username', 'admin');
Config::set('database.connections.mysql.password', 'secret');

您可以查看并了解它是如何工作的。

在本例中,我假定您正在构建一个系统,该系统可能从不同的应用程序连接到各种现有数据库

您可以在
config/database.php

'mysql' => [
    'driver' => 'mysql',
    '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' => '',
    'strict' => true,
    'engine' => null,
],

'mysql2' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST_2', '127.0.0.1'),
    'port' => env('DB_PORT_2', '3306'),
    'database' => env('DB_DATABASE_2', 'forge'),
    'username' => env('DB_USERNAME_2', 'forge'),
    'password' => env('DB_PASSWORD_2', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],
...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=db2_name_here
DB_USERNAME_2=db2_username_here
DB_PASSWORD_2=db2_password_here

...
但是,您还需要为每个用户指定从哪个外部数据库获取其详细信息的方法,例如
users
表上的列
DB\u name

在获取say
'Alex'
用户模型的数据时,您可以执行以下操作

$user = User::find(1); //if Alex has user_id 1 and where $user->db_name is 'mysql2' as is in the config/database.php file

$userDetails = DB::connection($user->db_name)->where('username',$user->name)->where('other_details','some details')->get();
请确保在
.env
中也指定此项,以匹配
config/database.php

'mysql' => [
    'driver' => 'mysql',
    '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' => '',
    'strict' => true,
    'engine' => null,
],

'mysql2' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST_2', '127.0.0.1'),
    'port' => env('DB_PORT_2', '3306'),
    'database' => env('DB_DATABASE_2', 'forge'),
    'username' => env('DB_USERNAME_2', 'forge'),
    'password' => env('DB_PASSWORD_2', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],
...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=db2_name_here
DB_USERNAME_2=db2_username_here
DB_PASSWORD_2=db2_password_here

...

你可以看到这里听起来像是租赁。这有一些软件包。