Я работаю в проекте, который использует несколько баз данных. Похоже, что Laravel использует только таблицу миграции в базе данных, которая установлена по умолчанию. Мне нужна одна таблица миграции для каждой базы данных, в которой регистрируются миграции, выполненные в этой конкретной базе данных. Это возможно?
Я определил базы данных в конфигурации следующим образом:
'connections' => [
'db1' => array(
'driver' => 'mysql',
'host' => 'db1.host',
'database' => 'db1',
'username' => 'username',
'password' => 'password',
),
'db2' => [
'driver' => 'mysql',
'host' => 'db2.host',
'database' => 'db2',
'username' => 'username',
'password' => 'password',
]
],
Я также сделал первую базу данных (db1) по умолчанию
'default' => 'db1'
Я устанавливаю таблицу миграции в обе базы данных
artisan migrate:install --database=db1
artisan migrate:install --database=db2
После этого я приступаю к созданию пары миграций для конкретной базы данных.
Создайте таблицу test1 в базе данных db1:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTest1Table extends Migration
{
public function up()
{
Schema::connection('db1')->create('test1', function(Blueprint $table)
{
$table->increments('id')->unsigned();
});
}
public function down()
{
Schema::connection('db1')->drop('test1');
}
}
Создайте таблицу test2 в базе данных db2:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTest2Table extends Migration
{
public function up()
{
Schema::connection('db2')->create('test2', function(Blueprint $table)
{
$table->increments('id')->unsigned();
});
}
public function down()
{
Schema::connection('db2')->drop('test2');
}
}
Теперь я запускаю миграции
artisan migrate
Ожидаемый результат
db1.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test1_table_in_db1 | 1 |
+-----------------------------+-------+
db2.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test2_table_in_db2 | 1 |
+-----------------------------+-------+
Фактический результат
db1.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test1_table_in_db1 | 1 |
| create_test2_table_in_db2 | 1 |
+-----------------------------+-------+
db2.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
Empty set
handle()
вместоfire()
. + Путь должен быть без префиксаapp/
, только'database/migrations/' . $name
17.05.2019