Lorsque vous créez une nouvelle colonne dans un tableau, vous pouvez utiliser le -> après ("nom de colonne") pour dicter où il va. Comment puis-je créer une migration qui réordonne les colonnes dans le bon ordre que je veux?
Essayez ceci, j'espère que cela vous aidera à trouver la bonne solution:
public function up()
{
DB::statement("ALTER TABLE example MODIFY COLUMN foo DATE AFTER bar");
}
public function down()
{
DB::statement("ALTER TABLE example MODIFY COLUMN foo DATE AFTER bar");
}
Si vous souhaitez le faire sans détruire les données, vous pouvez migrer les données en même temps que vous effectuez la mise à jour du schéma:
use DB;
public function up()
{
//Give the moving column a temporary name:
Schema::table('users', function($table)
{
$table->renameColumn('name', 'name_old');
});
//Add a new column with the regular name:
Schema::table('users', function(Blueprint $table)
{
$table->string('name')->after('city');
});
//Copy the data across to the new column:
DB::table('users')->update([
'name' => DB::raw('name_old')
]);
//Remove the old column:
Schema::table('users', function(Blueprint $table)
{
$table->dropColumn('name_old');
});
}
Je suggérerais une requête DB :: ('.. requête SQL brute ..'); et utilisez la requête de la réponse " Comment déplacer des colonnes dans une table MySQL? "
Supposons que le nom de votre colonne soit address
et que vous souhaitiez réorganiser sa position afin qu'elle vienne après une autre colonne appelée city
, et que le nom de votre table soit employees
.
Dans votre terminal, tapez la commande suivante:
php artisan migrate:make reorganize_order_of_column_address --table=employees
Vous ne pouvez modifier que reorganize_order_of_column_address
Et employees
selon vos besoins, mais conservez le reste de la commande tel quel.
Cela va générer un fichier de migration dans le dossier app/database/migrations
, L'ouvrir et placer votre code dans la fonction up()
comme ceci:
public function up()
{
Schema::table('employees', function(Blueprint $table)
{
$table->dropColumn("address");
});
Schema::table('employees', function(Blueprint $table)
{
$table->string('address')->after("city");
});
}
Notez que cette méthode supprimera la colonne et toutes les données qui y étaient stockées, et créera une nouvelle colonne avec le même nom après la colonne que vous détectez, et la nouvelle créée sera vide.
Cela a fonctionné pour moi dans Laravel 4.2, et cela peut également fonctionner dans Laravel 5 mais avec quelques modifications dans les commandes que vous devez taper dans le terminal .