php - seeders - migrar laravel
Use una tabla de migraciones de Laravel por base de datos (1)
Utilice el parámetro --database
con el comando --database
y almacene las migraciones para cada base de datos en directorios separados.
Puede tener directorios separados en la app/database/migrations
para cada una de sus bases de datos (en su caso db1
y db2
) y almacenar las migraciones apropiadas en cada directorio. Entonces podrías ejecutar las migraciones de esta manera:
artisan migrate --database="db1" --path="app/database/migrations/db1"
artisan migrate --database="db2" --path="app/database/migrations/db2"
De esta manera, su tabla de migrations
será independiente para cada base de datos.
Si desea hacer un esfuerzo adicional y automatizar el proceso, puede crear su comando personalizado que ejecutará todas las migraciones a la vez. Puede crear el comando de esta manera:
artisan command:make MigrateAllCommand --command=migrate:all
Esto creará una nueva app/commands/MigrateAllCommand.php
archivo app/commands/MigrateAllCommand.php
. El método de fire
tu comando se vería así:
public function fire()
{
foreach (Config::get(''database.connections'') as $name => $details)
{
$this->info(''Running migration for "'' . $name . ''"'');
$this->call(''migrate'', array(''--database'' => $name, ''--path'' => ''app/database/migrations/'' . $name));
}
}
Esto funcionará siempre que el nombre de la clave de configuración de la base de datos sea el mismo que el del directorio de migración. Entonces puede simplemente llamarlo así:
artisan migrate:all
Puede consultar los Documentos de comandos de Laravel para obtener más información.
Trabajo en un proyecto que usa múltiples bases de datos. Parece que Laravel solo usa la tabla de migraciones en la base de datos establecida como predeterminada. Me gustaría una tabla de migraciones por base de datos que registre las migraciones que se han realizado a esa base de datos específica. es posible?
He definido las bases de datos en la configuración de esta manera:
''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'',
]
],
También hice la primera base de datos (db1) la predeterminada
''default'' => ''db1''
Instalo la tabla de migraciones en ambas bases de datos
artisan migrate:install --database=db1
artisan migrate:install --database=db2
Después de eso, procedo a crear un par de migraciones específicas de bases de datos
Crear tabla test1 en la base de datos 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'');
}
}
Crear tabla test2 en la base de datos 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'');
}
}
Ahora corro las migraciones
artisan migrate
Gastos esperados
db1.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test1_table_in_db1 | 1 |
+-----------------------------+-------+
db2.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test2_table_in_db2 | 1 |
+-----------------------------+-------+
Resultado real
db1.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
| create_test1_table_in_db1 | 1 |
| create_test2_table_in_db2 | 1 |
+-----------------------------+-------+
db2.migrations
+-----------------------------+-------+
| migration | batch |
+-----------------------------+-------+
Empty set