📜  具有多个数据库的 laravel 8 应用程序 - PHP (1)

📅  最后修改于: 2023-12-03 14:50:07.100000             🧑  作者: Mango

具有多个数据库的 Laravel 8 应用程序

在一些情况下,我们可能需要在 Laravel 应用程序中使用多个数据库。本文将介绍如何在 Laravel 8 中实现具有多个数据库的应用程序。

创建数据库

首先,我们需要创建要使用的数据库。我们可以使用 MySQL、PostgreSQL、SQLite 或 Microsoft SQL Server。在这里,我们将创建两个 MySQL 数据库,一个用于应用程序数据,另一个用于身份验证。

mysql> CREATE DATABASE my_app_db;
mysql> CREATE DATABASE my_auth_db;
配置数据库

接下来,我们需要在 .env 文件中配置我们的数据库。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_app_db
DB_USERNAME=root
DB_PASSWORD=

AUTH_DB_CONNECTION=mysql
AUTH_DB_HOST=127.0.0.1
AUTH_DB_PORT=3306
AUTH_DB_DATABASE=my_auth_db
AUTH_DB_USERNAME=root
AUTH_DB_PASSWORD=
配置数据库连接

接下来,我们需要在 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', 'my_app_db'),
        'username' => env('DB_USERNAME', 'root'),
        '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'),
        ]) : [],
    ],

    'auth' => [
        'driver' => 'mysql',
        'url' => env('AUTH_DATABASE_URL'),
        'host' => env('AUTH_DB_HOST', '127.0.0.1'),
        'port' => env('AUTH_DB_PORT', '3306'),
        'database' => env('AUTH_DB_DATABASE', 'my_auth_db'),
        'username' => env('AUTH_DB_USERNAME', 'root'),
        'password' => env('AUTH_DB_PASSWORD', ''),
        'unix_socket' => env('AUTH_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'),
        ]) : [],
    ],
],
使用连接

现在我们已经创建了两个数据库连接,接下来我们需要在应用程序中使用它们。

连接

我们可以使用 Laravel 预定义的方式连接到任何一个数据库连接。

\DB::connection('mysql')->table('users')->get();
\DB::connection('auth')->table('auth_users')->get();
模型

我们可以使用 Laravel 提供的 Model 类来连接任何一个数据库连接。

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $connection = 'mysql';
    protected $table = 'users';
}

namespace App\Models\Auth;

use Illuminate\Database\Eloquent\Model;

class AuthUser extends Model
{
    protected $connection = 'auth';
    protected $table = 'auth_users';
}

现在,我们已经成功地在 Laravel 8 中实现了多个数据库的应用程序。