laravel:从2个mysql数据库生成迁移

uhry853o  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(344)

我在mysql上将我的数据库分为两个数据库,我想从laravel上的两个数据库生成迁移。我做了所有的配置,但是当我执行命令“php artisanmigrate:generate“它只为第一个数据库创建迁移。有人知道如何创建这两个数据库的迁移吗?
感谢您的帮助:)
我的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' => false,
        'engine' => 'InnoDB ROW_FORMAT=DYNAMIC' ,
    ], 

'mysql2' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST_2', '127.0.0.1'),
        'port' => env('DB_PORT_2', '3306'),
        'database' => env('DB_DATABASE_2', 'forge1'),
        'username' => env('DB_USERNAME_2', 'forge1'),
        'password' => env('DB_PASSWORD_2', ''),
        'unix_socket' => env('DB_SOCKET_2', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => 'InnoDB ROW_FORMAT=DYNAMIC' ,
    ],

我的.env文件

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

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=evamesure1
DB_USERNAME=root
DB_PASSWORD=
rryofs0p

rryofs0p1#

如果您希望迁移2数据库,那么您可以在 .env 使用运行第一次迁移 php artisan migrate ```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=evamesure
DB_USERNAME=root
DB_PASSWORD=

先完成之后 `migration` 更新您的 `.env` 到下一个 `database` 再跑一次 `php artisan migrate` ```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=evamesure1
DB_USERNAME=root
DB_PASSWORD=
eivgtgni

eivgtgni2#

我不知道如何生成迁移,但在编写迁移时,可以指定要在其上运行迁移的连接:

Schema::connection('mysql')->create('your_table', function (Blueprint $table) {
    // This table will only be created for the mysql connection
});

Schema::connection('mysql2')->create('your_table', function (Blueprint $table) {
    // This table will only be created for the mysql2 connection
});

这将允许您为不同的数据库使用不同的表。如果希望两个数据库中的表相同,可以采用相同的方法:

foreach (['mysql', 'mysql2'] as $connection) {
    Schema::connection($connection)->create('your_table', function (Blueprint $table) {
        // Create a table for each database
    });
}

不要忘记,如果希望某个模型使用非默认连接,则需要在模型中指定相关连接:

class User extends Model
{
    protected $connection = 'mysql2';
}
q9yhzks0

q9yhzks03#

migrate:generate ,然后更新 DB_CONNECTION 环境变量到 mysql2 再运行一次。
不要在.env文件中放置重复的密钥。在配置文件中添加后缀 _2 到第二个连接的env变量,但在.env中没有使用该后缀。
如果希望所有环境都使用两个数据库,则必须在第二个数据库的迁移和模型中手动插入连接名称。

相关问题