Tornar al Blog

migrations

Categoria: codes | Publicat el 19 Jan, 2025
migrations

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


Etiquetes:

#laravel #migrations #bbdd #artisan

Articles Relacionats

Resum per importar fitxers CSV de comptabilitat a la base de dades autonomo_contabilidad amb Python
Resum per importar fitxers CSV de comptabilitat a la base de dades autonomo_contabilidad amb Python Aquest script en Python importa dades d'un fitxer CSV (com `compartit 3tr-2025 - VENDA.csv`) a la base de dades MySQL `autonomo_contabilidad`, utilitzant l'esquema de taules `wp_contabilidad_clientes`, `wp_contabilidad_empleados`, `wp_contabilidad_productos`, `wp_contabilidad_ventas` i `wp_contabilidad_detalles_venta`.
Creació d'una aplicació Laravel 12
Creació d'una aplicació Laravel 12 nstal·lant PHP i l'instal·lador Laravel Abans de crear la vostra primera aplicació Laravel, assegureu-vos que la vostra màquina local tingui PHP , Composer i l'instal·lador Laravel instal·lats. A més, hauríeu d'instal·lar Node i NPM o Bun perquè pugueu compilar els actius d'interfície de la vostra aplicació.
posts Array Pdo
posts Array Pdo Una manera adequada de nomenar aquesta consulta PDO podria ser "ObtenirPàginesPerCategoriaIEtiqueta" o "LlistarPàginesFiltrades". Aquest nom reflecteix que la consulta selecciona posts associats a una categoria i etiqueta específica. També pot ser útil considerar la claredat de la consulta en el context de l'aplicació, per exemple:
Quina és la diferència entre PDO i MySQLi?
Quina és la diferència entre PDO i MySQLi? El que no està tan definit és quina és la millor manera de connectar-se a MySQL fent servir PHP. A priori en destaquen dues:MySQLi, PDO
pagina /post/543 del projecte laravel12.test
pagina /post/543 del projecte laravel12.test pagina /post/543 del projecte laravel12.test
pagina /post/317 del projecte larpreline.test
pagina /post/317 del projecte larpreline.test pagina /post/317 del projecte larpreline.test