Advertisement

Responsive Advertisement

Laravel 9 - Contoh pengaplikasian Scope Binding


Fungsi dari Scope Binding sendiri adalah untuk membatasi akses binding yang dimiliki laravel. jadi jika bukan miliknya maka ia tidak dapat di akses, contoh kasus disini adalah saat kita hendak mengambil data Article yang setiap artikel ada pemiliknya. dan jika bukan miliknya maka tidak dapat diakses

Pertama, kita coba buat dulu Model Artikel beserta Migration, Controller dan Factory. dengan perintah berikut :

php artisan make:model Article -mcf

dengan perintah diatas, kita dibuatkan Migration pada folder database/migration

dan berikut contoh codingan migration pada file 202xxxxx_create_articles_table.php

    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->foreignIdFor(User::class);
            $table->string('title');
            $table->timestamps();
        });
    }

pada kasus diatas foreignIdFor akan membuatkan kitab kolom yang bernama user_id.

selain migration, kita juga di buatkan factory dan seeder yang ada di dalam folder database.

berikut contoh kodingan pada file ArticleFactory.php:

        public function definition()
        {
            return [
                'user_id'=>User::factory(),
                'title'=>str($this->faker->sentence())->title()
            ]; 
        }

berikut contoh kodingan pada file DatabaseSeeder.php:

        public function run()
        {
            Article::factory(10)->create();
        }


Setelah diatas terpenuhi, saatnya melakukan migrasi beserta seeder. dengan perintah

    php artisan migrate:fresh --seed

sekarang di database mysql kita memiliki 10 data dummy pada tabel users dan articles.

Berikutnya kita akan coba membuat route dengan Scope Binding. berikut contohnya kodenya pada routes/web.php :

Route::get('/articles/{user}/{article}',[ArticleController::class,'show'])->scopeBindings();

contoh route diatas menerima 2 parameter. pertama {user} dan kedua {article}.

berikut contoh kodingan pada controller. yang ada pada direktori app/Http/Controllers/ArticleController.php

    <?php

    namespace App\Http\Controllers;
    
    use App\Models\User;
    use App\Models\Article;
    use Illuminate\Http\Request;
    
    class ArticleController extends Controller
    {
        function show(User $user, Article $article)
        {
            return $article->load('user');
        }
    }
    
dan jangan lupa pada model User dan Article untuk di relasikan. (One to Many) artinya setiap user bisa memiliki banyak Articles.

tambahkan kode berikut di app/models/Article.php
    public function user()
    {
        return $this->belongsTo(User::class);
    }

tambahkan kode berikut di app/models/User.php
    public function articles()
    {
        return $this->hasMany(Article::class);
    }

untuk tes, sekarang kita coba jalankan perintah php artisan serv
kemudian kita buka url 127.0.0.1:8000/articles/1/1
maka ia akan berhasil menampilkan data.

namun jika kita buka url 127.0.0.1:8000/articles/1/2
maka akan di arahkan ke 404

mengapa hal itu terjadi?
kita ingat bahwa parameter yang ada di route adalah /articles/{user}/{article}

dan jika kita perhatikan pada database mysql pada tabel articles.
artikel yang memiliki id 1 adalah user_id 1. maka jika kita mencoba mengakses article id 2. dia akan di tolak.

Posting Komentar

0 Komentar