1. Laravel
  2. PHP

Laravel Route Model Binding

This entry is part 3 of 5 in the series Clean Code Laravel

Pada umumnya setiap website akan memiliki query untuk menampilkan detail dari suatu table sesuai dengan url parameter yang diminta, biasanya kita akan mengambil id yang sesuai dengan parameter yang diminta tersebut. Karena hampir semua website akan melakukan hal ini berulang-ulang, Laravel menyediakan sebuah fitur dengan nama Route Model Binding untuk menangani kasus ini. Route Model Binding memungkinkan kita melakukan dependecy injection pada model berdasarkan parameter yang diberikan.

Misalnya pada project Laravel kita, kita perlu menampilkan halaman profile dari user yang terdaftar pada project kita. Umumnya, kita akan memiliki url seperti ini user/1 untuk menampilkan user dengan id 1.

Untuk menampilkan url seperti diatas, kita akan memiliki sebuah route kurang lebih seperti ini.

Route::get('user/{id}', 'UserController@show')

Kemudian pada controller, kita akan memiliki kode kurang lebih seperti dibawah ini.

class UserController extends UserController
{
    public function show($id)
    {
        $user = User::where('id', $id)->firstOrFail();

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

Tidak ada yang salah dengan kode diatas, kebutuhan kita akan terpenuhi. Akan tetapi, Laravel menyediakan cara yang lebih efektif untuk menangani hal ini. Selain itu, pada 1 controller biasanya memiliki beberapa action yang menggunakan query yang sama, misalnya kita juga akan memiliki sebuah action untuk menghapus user dengan id tertentu, sehingga query diatas akan kita gunakan kembali.

public function destroy($id)
{
    $user = User::where('id', $id)->firstOrFail();
    $user->delete();

    //
}

Route Model Binding

Dengan menggunakan Route Model Binding, kita tidak perlu membuat query sendiri, Laravel akan secara otomatis melakukan query terhadap model yang kita definisikan sebagai dependency injection.

Route::get('user/{user}', 'UserController@show')
class UserController extends UserController
{
    public function show(User $user)
    {
        return view('user.show', [
            'user' => $user,
        ]);
    }
}

Pada contoh diatas, kita menambahkan dependency injection berupa model User. Laravel akan otomatis melakukan pencarian pada table users berdasarkan parameter id pada URL.

Secara default Laravel akan melakukan pencarian berdasarkan field id, untuk mengubahnya kita bisa mendefinisikan sebuah method pada model.

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'username';
}

Dengan menambahkan method diatas, kode pencarian akan diubah berdasarkan field username pada table users.

Series Navigation<< Laravel Shared Validation RulesLaravel – Model Accessor >>
Comments to: Laravel Route Model Binding

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.