【问题标题】:Laravel : generate migrations from 2 MySQL databasesLaravel:从 2 个 MySQL 数据库生成迁移
【发布时间】:2019-02-06 12:29:00
【问题描述】:

我在 MySQL 上将我的数据库划分为 2 个数据库,我想从 laravel 上的两个数据库生成迁移。 我进行了所有配置,但是当我执行命令“php artisan migrate:generate”时,它只为第一个数据库创建迁移。 有谁知道如何创建 2 个数据库的迁移?

感谢您的帮助:)

我的 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=

【问题讨论】:

  • 我觉得能产生冲突最好改database最好修改.env

标签: mysql laravel


【解决方案1】:

运行migrate:generate,然后将DB_CONNECTION 环境变量更新为mysql2 并再次运行。

不要在 .env 文件中放置重复的键。在您的配置文件中,您将 _2 后缀添加到第二个连接的 env 变量,但您没有在 .env 中使用该后缀。


如果您希望所有环境都使用两个数据库,则必须在第二个数据库的迁移和模型中手动插入连接名称。

【讨论】:

  • 感谢我为这两个数据库创建了迁移。这意味着在我的 .env 和 database.php 文件中,我只保留一个数据库的连接?
  • 是的,如果您希望将所有这些都集中在一个数据库中
【解决方案2】:

如果您要迁移 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=

【讨论】:

    【解决方案3】:

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

    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';
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 2016-08-21
      • 2016-05-05
      • 2019-04-23
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2017-06-11
      • 2010-10-25
      相关资源
      最近更新 更多