如何在Laravel Sail中连接到多个数据库?

6 浏览
0 Comments

如何在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,所以我使用默认的连接。

0
0 Comments

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中成功连接到多个数据库。

0