Laravel: генерировать миграции из 2 баз данных MySQL - PullRequest
0 голосов
/ 31 августа 2018

Я разделил свою базу данных на 2 базы данных на MySQL, и я хотел бы генерировать миграции из обеих баз данных на 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=

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

, если вы хотите перенести базу данных 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=
0 голосов
/ 31 августа 2018

Я не знаю о создании миграций, но когда вы пишете свои миграции, вы можете указать соединение, для которого вы хотите запустить миграцию:

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';
}
0 голосов
/ 31 августа 2018

Запустите migrate:generate, затем обновите переменную DB_CONNECTION env до mysql2 и запустите ее снова.

Не кладите дубликаты ключей в ваш файл .env. В вашем конфигурационном файле вы добавили _2 к переменным env второго соединения, но не используете этот суффикс в .env.


Если вы хотите, чтобы во всех средах использовались две базы данных, вам придется вручную вставить имя соединения в миграции и модели второй базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...