Pada artikel Laravel untuk Pemula seri sebelumnya saya sudah menjelaskan tentang Controller pada framework Laravel, mulai dari cara kerja controller itu sendiri sampai dengan menghubungkannya ke Model. Nah dan sekarang kita akan lanjutkan dengan sesuatu yang lebih menarik lagi yaitu Resource Controller.

Umumnya pada saat membuat operasi CRUD( Create, Read, Update, Delete ), kita membutuhkan banyak route yang didaftarkan pada file route.php sehingga ini akan terlihat kurang rapi jika aplikasi yang kita buat memiliki banyak modul - modul.

Terlebih lagi kita bisa menghemat banyak waktu karna kita tidak perlu mendaftarkan kesemua route untuk membuat operasi CRUD. Konsep dari Resource Controller ini cukup sederhana yakni menggabungkan semua fungsi yang berhubungan dengan CRUD pada Controller dan menjadikannya 1 route group.

Ok mungkin jika tidak dipraktekan terdengarnya sangat rumit mungkin, oleh karena itu kita langsung saja prakteknya.

Sebelum itu siapkan dulu fresh Laravel-nya ya :)

 

Model dan Migration

Ok yang pertama kita lakukan tentunya membuat Model terlebih dahulu, oh iyaa disini saya anggap kalian sudah mensetting database pada file .env jadi konfigurasi database bisa saya skip.

Buatlah model sesuai dengan selera kalian bebas, kalau saya akan membuat dengan nama Student.php.

php artisan make:model Student

Ingat sesuaikan nama modelnya dengan model yang kalian inginkan, jika ingin mengikuti dari contoh yang saya berikan juga tidak apa.

Kemudian isi field dari model tersebut.

protected $fillable = [
      'nis',
      'name',
      'age'
];

Sekedar info modelnya saya ambil dari tutorial sebelumnya tentang Migration dan Model jika kalian mengikuti tutorial tersebut dan masih memiliki filenya bisa gunakan file tersebut tapi jika tidak punya juga tidak masalah.

Untuk model sudah selesai dan sekarang lanjut pada pembuatan migration, bila kalian belum terbiasa dengan migration dan ingin buat melalui phpmyadmin itu tidak masalah kalian bisa skip bagian ini.

php artisan make:migration create_students_table

Kemudian isi field sebagai berikut.

Schema::create('students', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('nis', 20)->unique();
      $table->string('name');
      $table->integer('age');
      $table->timestamps();
});

Migration ini juga saya ambil tutorial sebelumnya. Ok jika sudah tinggal dimigrate.

php artisan migrate

 

Controller

Ok sampai pada pembuatan Controller. Command untuk membuat Resource Controller agak sedikit berbeda hanya ada tambahan --resource diakhir command, jadi command-nya akan seperti berikut.

php artisan make:controller StudentController --resource

Nah disini kuncinya, ketika kalian selesai membuat Resource Controller maka Controller yang kalian buat akan otomatis terisi dengan 7 method. Dimana method - method tersebut memiliki fungsinya masing - masing sesuai dengan namanya.

Ketujuh method tersebut adalah:

  1. index
  2. create
  3. store
  4. show
  5. edit
  6. update
  7. destroy

index

Kita bahas method index terlebih dahulu, method ini digunakan untuk membaca seluruh data dan biasanya akan me-return sebuah view kemudian mengambil data tabel tertentu dari database.

Sebagai contoh saya akan menampilkan semua data pada tabel students pada method ini jadi kode yang saya isi untuk method tersebut adalah sebagai berikut.

$students = \App\Student::all();
return view('student.index', ['students' => $students]);

 

create

Ok method selanjutnya adalah create, method ini tidak dibuat untuk proses insert data pada database melainkan hanya menampilkan form create. Jadi pada method create ini kita hanya me-return view saja.

return view('student.create');

Oh iyaa sekedar info, folder base view yang saya gunakan adalah student, jadi dalam folder resources/views saya buat lagi folder bernama student nah pada folder student saya biat 4 view yaitu index.blade.php, create.blade.php, show.blade dan edit.blade.php.

 

store

Nah pada method ini lah proses insert dilakukan. Kita gunakan method create pada model untuk menginsert data.

\App\Student::create($request->all());

return redirect()->route('student.index')->with('success', 'Data berhasil ditambahkan!');

Flow dari method store ini biasanya insert data > lalu redirect pada route index dari student, Ok mungkin kalian sedikit bingung route 'student.index' itu dateng dari mana itu wajar karena kita belum buat routenya nanti setelah semua method terisi kita akan langsung sambungkan ke route dan untuk sekarang terima saja dulu seperti ini.

 

show

Selanjutnya method show, method ini hanya mengambil single data dengan id sebagai parameternya biasanya method ini digunakan untuk melihat detail dari satu row data. 

$student = \App\Student::find($id);

return view('student.show', ['student' => $student]);

 

edit

Sebenarnya fungsi edit dan show hampir sama yaitu mengambil single data, hanya saya view-nya yang berbeda pada method show tadi isi viewnya tidak harus berupa form bisa saja hanya list detail saja.

Sedangkan method edit view-nya harus berupa form sebab disinilah user akan melakukan proses edit data hingga update.

$student = \App\Student::find($id);

return view('student.edit', ['student' => $student]);

 

update

Ini kurang lebih sama seperti create tadi, hanya saja eloquent method yang digunakan berbeda.

$data = \App\Student::find($id);

$data->update($request->all());

return redirect()->route('student.index')->with('success', 'Data berhasil terupdate!');

Method update hanya bisa dipanggil ketika single collection dari Student sudah diterima.

 

destroy

Dan ini yang terakhir, method destroy sesuai namanya method ini digunakan untuk operasi delete.

\App\Student::destroy($id);

return redirect()->route('student.index')->with('success', 'Data berhasil dihapus!');

Selain menggunakan cara diatas, bisa juga dengan cara seperti ini.

$student = \App\Student::find($id);
$student->delete();

return redirect()->route('student.index')->with('success', 'Data berhasil dihapus!');

Cara yang satu ini hampir sama dengan update tadi.

 

Route

Ok sampai tahap ini kita belum bisa eksekusi karna kita belum mendaftarkan routenya, pada tutorial tentang Routing kemarin kita baru belajar membuat route secara manual dengan menghubungkan route dengan controller method.

Nah sekarang kita tidak perlu menghubungkan satu persatu kesemua method pada resource controller yang sudah kita buat, karena laravel sudah menyediakan route khusus untuk resource.

Cara penggunaannya seperti ini.

Route::resource('student', 'StudentController');

Cukup mudah bukan. Dan sekarang kalian coba jalankan command ini.

php artisan route:list

Command diatas digunakan untuk mengetahui route apa saja yang tersedia pada aplikasi Laravel kita, command diatas juga menampilkan spesifikasi dari masing - masing route mulai dari uri, name, controller, hingga method.

Ok jika kalian sudah menjalankan command-nya maka hasilnya kurang lebih akan seperti ini.

Dengan melihat ini kalian pasti sudah mengerti maksudnya, jadi method resource pada route tadi akan meng-generate semua route yang dibutuhkan mulai dari method, uri, name untuk operasi CRUD, dan dari sinilah asal muasal student.index tersebut.

Dan juga format uri dan name akan mengikuti dengan Route::resource yang kalian daftarkan tadi, jika kalian mendaftarkan dengan nama Route::resource('siswa') maka uri dan name akan menjadi siswa juga.

Dengan ini maka file web.php kalian akan terlihat rapi dan tentunya Readable.

 

Ok sekian tutorial kali ini, jika ada pertanyaan atau ada yang masih bingung bisa ditanyakan dikolom komentar.
Untuk kalian yg lagi cari monitor atau aksesoris seperti keyboard, mousepad dan mouse bisa lihat rekomendasi saya di tokopedia ya.