如何在Laravel Sail中连接到多个数据库?
如何在Laravel Sail中连接到多个数据库?
我有两个数据库连接。一个是postgresql(没有问题),另一个是mysql。
我能够连接到数据库并使用以下命令从文件中导出数据:
cat cosmo.sql | docker exec -i edb9f60b1531 /usr/bin/mysql -u sail --password=password testing
但是当我尝试使用eloquent时,它卡住了。这是我进行的测试:
use App\Models\Access; Access::find(1); Illuminate\Database\QueryException SQLSTATE[HY000] [2006] MySQL server has gone away (Connection: mysql, SQL: select * from `access` where `access`.`id` = 1 limit 1).
这是我的.env文件内容:
DB_CONNECTION=pgsql DB_HOST=pgsql DB_PORT=5432 DB_DATABASE=entropia_api DB_USERNAME=sail DB_PASSWORD=password DB_CONNECTION2=mysql DB_HOST2=mysql DB_PORT2=3306 DB_DATABASE2=testing DB_USERNAME2=sail DB_PASSWORD2=password
这是我的模型:
我没有更改config/database.php,所以我使用默认的连接。
Laravel Sail是一个用于Laravel应用程序的开发环境,它提供了Docker容器来运行应用程序。有时候,我们需要连接到多个数据库,本文将介绍如何在Laravel Sail中连接到多个数据库。
要在Laravel Sail中连接到多个数据库,请按照以下步骤进行操作:
1. 在docker-compose.yml文件中添加额外的数据库配置。例如,要添加一个MySQL数据库和一个PostgreSQL数据库,请在docker-compose.yml文件中添加以下行:
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
container_name: sail-mysql
pgsql:
image: 'postgres:13'
ports:
- '${FORWARD_DB_PORT:-5432}:5432'
environment:
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_USER: '${DB_USERNAME}'
POSTGRES_PASSWORD: '${DB_PASSWORD}'
volumes:
- 'sailpgsql:/var/lib/postgresql/data'
networks:
- sail
container_name: sail-pgsql
2. 在.env文件中添加额外的数据库配置。例如:
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=my_database DB_USERNAME=my_username DB_PASSWORD=my_password DB_CONNECTION_PGSQL=pgsql DB_HOST_PGSQL=pgsql DB_PORT_PGSQL=5432 DB_DATABASE_PGSQL=my_database_pgsql DB_USERNAME_PGSQL=my_username_pgsql DB_PASSWORD_PGSQL=my_password_pgsql
3. 在Laravel应用程序中的config/database.php文件中添加额外的数据库连接。例如:
'connections' => [ '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', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL_PGSQL'), 'host' => env('DB_HOST_PGSQL', '127.0.0.1'), 'port' => env('DB_PORT_PGSQL', '5432'), 'database' => env('DB_DATABASE_PGSQL', 'forge'), 'username' => env('DB_USERNAME_PGSQL', 'forge'), 'password' => env('DB_PASSWORD_PGSQL', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], ],
4. 要使用额外的数据库连接,在数据库查询中指定连接名称。例如:
$users = DB::connection('pgsql')->select('select * from users');
通过以上步骤,我们可以在Laravel Sail中成功连接到多个数据库。