Robimy update kolumny w naszej tabeli, który będzie nam potrzebny do poznania query scopes. Uczymy się tworzyć migracje dodające kolumny.

Ok, dotychczas wszystko upraszczałem, żeby nie tworzyć zamieszania. Używaliśmy takich komend:

php artisan make:model Note -mfs

I to nam tworzyło:

  • model Note
  • tabelę notes
  • NoteFactory
  • NoteSeeder

Ponadto wszystko trzymaliśmy w jednej migracji, czyli:

  • nazwy wszystkich kolumn
  • timestamps
  • softDeletes
  • foreign key

Możemy to sobie przypomnieć:

  public function up(): void
    {
        Schema::create('notes', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            $table->softDeletes();
            $table->unsignedBigInteger('person_id')->nullable(true);
            $table->string('title');
            $table->text('content');
            $table->foreign('person_id')->references('id')->on('people')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('notes');
    }

Celowo wkleiłem metody up i down, na down dotychczas nie patrzyliśmy, zaś w up trzymaliśmy dosłownie wszystko a cała migracja tworzona była flagą -m dodaną do make:model, jej nazwa wnioskowana z nazwy modelu.

Ale dobre czasy się kończą, i chcemy dodać kolumnę hidden do tabeli notes. Użyjemy komendy:

php artisan make:migration add_hidden_to_notes_table --table=notes

Konwencja nazewnicza zachowana, upewniamy się podwójnie flagą –table z nazwą tabeli, którą modyfikujemy. Teraz to hidden dodajmy:

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('notes', function (Blueprint $table) {
            $table->boolean('hidden')->default(false);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('notes', function (Blueprint $table) {
            $table->dropColumn('hidden');
        });
    }
};

Hidden to będzie boolean, domyślnie fałsz. W down musimy zrobić odwrotność migracji, czyli skoro tutaj dodajemy kolumnę, to tam musimy ją usunąć.

Bo przecież migracje można rollbackować, to też powinniśmy pamiętać. Sprawdźmy, czy działa:

php artisan migrate

Jeżeli nie ma błędów, to do naszych notes dodano pole hidden, typu tinyint(1) (może być 0 lub 1) o domyślnej wartości 0 (Laravel ogarnia zamienianie false i true na 0 i 1).

Gdybyśmy zrobili rollback migracji to kolumna hidden zniknie (ale nie róbmy, przyda się).