Cara kerja Laravel: MVCMateri 12 dari 16
Daftar materi
Cara kerja Laravel: MVC · Materi 12 dari 16
Model dan migration: ngobrol dengan database
Migration membuat tabelnya, model menjadi perantaranya. Di akhir materi ini, catatan pertamamu tersimpan di database sungguhan.
3 menit 0 komentar
Daftar isi
Sejauh ini data catatan kita hanya array di controller. Saatnya menyimpannya di database. Ada dua konsep yang bekerja berpasangan:
- Migration: file berisi resep membuat atau mengubah tabel. Dengan migration, struktur database tercatat di kode, bisa dijalankan ulang di komputer lain, dan bisa dibatalkan.
- Model: class PHP yang mewakili satu tabel. Lewat model, kamu membaca dan menulis data tanpa menulis SQL.
Buat keduanya sekaligus:
php artisan make:model Note -m
Tanda -m artinya "sekalian migration-nya". Hasilnya dua file: app/Models/Note.php dan satu file di database/migrations/ yang namanya diawali tanggal dan diakhiri create_notes_table.php. Perhatikan: model bernama Note (tunggal), tabelnya notes (jamak). Laravel menebak nama tabel dari nama model, dan itulah sebabnya penamaan jadi penting.
Menulis migration
Buka file migration itu. Di dalam method up(), tambahkan dua kolom:
public function up(): void
{
Schema::create('notes', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
id() membuat nomor urut unik; string untuk teks pendek (judul), text untuk teks panjang (isi); timestamps() menambahkan kolom created_at dan updated_at yang diisi Laravel secara otomatis. Jalankan:
php artisan migrate
Tabel notes kini ada di database. Kalau kamu salah menulis kolom, jalankan php artisan migrate:rollback untuk membatalkan migration terakhir, perbaiki file-nya, lalu migrate lagi. Selama masih belajar, cara ini aman; di aplikasi yang sudah dipakai orang, perubahan tabel dibuat sebagai migration baru.
Mencoba model lewat tinker
Laravel punya konsol interaktif untuk mencoba kode tanpa membuat halaman:
php artisan tinker
Di dalamnya, ketik baris-baris ini satu per satu:
$note = new App\Models\Note;
$note->title = 'Catatan pertama';
$note->body = 'Ditulis dari tinker.';
$note->save();
App\Models\Note::all();
Perintah terakhir menampilkan semua catatan, lengkap dengan id dan waktu dibuat. Itu data sungguhan di database/database.sqlite. Keluar dari tinker dengan exit.
Mass assignment
Nanti kita akan membuat catatan langsung dari data formulir dengan Note::create([...]). Supaya itu boleh, model harus menyebut kolom mana yang aman diisi dari luar. Buka app/Models/Note.php dan tambahkan:
class Note extends Model
{
protected $fillable = ['title', 'body'];
}
Ini pengaman: tanpa daftar itu, Laravel menolak mengisi kolom dari array, supaya pengguna tidak bisa menyelipkan kolom yang tidak seharusnya ia ubah.
Menyambungkan ke halaman
Terakhir, ganti array di controller dengan data sungguhan:
use App\Models\Note;
public function index()
{
return view('notes.index', ['notes' => Note::latest()->get()]);
}
latest() mengurutkan dari yang terbaru, get() mengambilnya. Di view, $note sekarang object, jadi tampilkan judulnya dengan {{ $note->title }}. Muat ulang /catatan: catatan dari tinker tadi muncul di halaman.
Keempat bagian MVC sudah tersambung. Bab berikutnya kita rapikan jadi aplikasi yang utuh: menambah, mengubah, dan menghapus catatan lewat formulir.
Diskusi
Masuk dulu untuk ikut berkomentar. Masuk
Belum ada diskusi di sini. Jadilah yang pertama bertanya.