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'); } }
public function user() { return $this->belongsTo(User::class); }
public function articles() { return $this->hasMany(Article::class); }
untuk tes, sekarang kita coba jalankan perintah php artisan serv
0 Komentar