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