Creado en: 2025-01-19 19:59:35
Actualizado en: 2025-01-20 10:22:40
la migracio crea i administra les taules a la base de dades de laravel
Les migrations es guarden dins de database/migrations.
Cada fitxer de migration té un nom estructurat seguint aquest format:
YYYY_MM_DD_HHMMSS_create_nom_taula_table.php
Per exemple:
2024_01_19_120000_create_posts_table.php
El prefix de data i hora assegura que les migrations s'executin en ordre cronològic.
Per crear una nova migration, pots executar aquesta comanda a la terminal:
php artisan make:migration create_nom_taula_table
Per exemple, si vols crear una taula posts:
php artisan make:migration create_posts_table
Això generarà un nou fitxer dins de database/migrations/.
Cada fitxer de migration conté dues funcions principals:
Exemple d'una migration per la taula posts:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->integer('id', true);
$table->string('title');
$table->integer('category_id')->nullable()->index('categoria_id');
$table->string('excerpt', 500)->nullable();
$table->text('content')->nullable();
$table->string('img')->nullable();
$table->string('url')->nullable();
$table->string('ins')->nullable();
$table->string('face')->nullable();
$table->string('youtube')->nullable();
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};
Per aplicar totes les migrations pendents a la base de dades:
php artisan migrate
Si només vols executar una sola migration:
php artisan migrate --path=database/migrations/2024_01_19_120000_create_posts_table.php
Si has fet un canvi incorrecte o vols tornar enrere:
php artisan migrate:rollback
php artisan migrate:fresh
Si ja tens una taula creada i vols afegir una nova columna, has de crear una nova migració:
php artisan make:migration add_column_to_posts_table --table=posts
Això generarà un fitxer on podràs afegir la nova columna dins la funció up():
Schema::table('posts', function (Blueprint $table) {
$table->string('slug')->after('title')->unique();
});Per eliminar la columna en cas de rollback:
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('slug');
});Finalment, executa la migració:
php artisan migrate
Laravel permet definir relacions a les migrations. Exemple d'una relació de posts amb categories:
Schema::table('posts', function (Blueprint $table) {
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});Aquest codi crea una clau forana que connecta posts amb categories.
✔ Sempre usa php artisan make:migration per generar migrations.
✔ Executa php artisan migrate abans de començar a treballar per assegurar que tens l'última versió de la base de dades.
✔ Usa rollback o fresh només en entorns de desenvolupament, no en producció.
✔ Si modifiques una taula, crea una nova migració en lloc d'editar una antiga (per evitar problemes en col·laboracions).
ComandaDescripcióphp artisan make:migration create_nom_taula_table | Crear una nova migration
php artisan migrate | Aplicar totes les migrations
php artisan migrate:rollback | Tornar enrere l'última migració
php artisan migrate:fresh | Esborrar i recrear totes les taules
php artisan make:migration add_column_to_table --table=nom_taula | Modificar una taula existent
Les migrations a Laravel són una eina molt potent per gestionar la base de dades com si fos codi. Permeten: ✔ Definir i modificar taules sense tocar la base de dades directament.
✔ Mantenir un historial de canvis i compartir-lo amb altres desenvolupadors.
✔ Assegurar consistència entre diferents entorns (desenvolupament, staging, producció).