migrations

la migracio crea i administra les taules a la base de dades de laravel

1. On es troben les migrations?

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.

2. Com es crea una migration?

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/.

3. Com és una migration?

Cada fitxer de migration conté dues funcions principals:

  • up(): Defineix què passa quan la migration s'executa (creació/modificació de la taula).
  • down(): Defineix què passa quan la migration es desfà (elimina la taula o canvis).

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');
    }
};

4. Com s’executa una migration?

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

5. Com es desfà una migration?

Si has fet un canvi incorrecte o vols tornar enrere:

  • Fer un pas enrere (rollback de la última migració aplicada):
  • php artisan migrate:rollback
  • Eliminar totes les migrations i tornar a començar:
  • php artisan migrate:fresh
  • ⚠️ Això esborra totes les dades de la base de dades!

6. Com modificar una taula existent?

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

7. Com gestionar relacions entre taules?

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.

8. Bones pràctiques amb migrations

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).

🚀 Resum ràpid

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

🔹 Conclusió

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ó).