Laravel secara default menyediakan fitur yang bernama Seeding
. Fitur ini memungkinkan kita untuk melakukan proses insert data ke dalam database tanpa perlu form atau yang lainnya.
Fitur ini umumnya digunakan untuk membuat dummy data atau data yang diatur secara default oleh kita. Dan untuk fitur ini berada di dalam folder database/seeders
. Secara default kita sudah disediakan sebuah class yang bernama DatabaseSeeder
. Di dalam class ini kita bisa memanggil seeder yang nantinya kita buat dan kita juga bisa mengurutkan file seeder saat dieksekusi.
Langkah 1 - Membuat Seeder Roles
Sekarang kita akan belajar membuat seeder untuk data roles. Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.
php artisan make:seed RolesTableSeeder
Jika perintah di atas berhasil, maka kita akan mendapatkan 1 file baru dengan nama RolesTableSeeder.php
di dalam folder database/seeders
. Silahkan buka file tersebut, kemudian ubah semua kode-nya menjadi seperti berikut ini :
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class RolesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Role::create(['name' => 'admin']);
Role::create(['name' => 'user']);
}
}
Dari perubahan kode di atas, pertama kita import Model Role
dari Laravel Spatie Permission.
use Spatie\Permission\Models\Role;
Setelah itu, di dalam funtion run
kita melakukan create data baru, yaitu untuk admin
dan user
Role::create(['name' => 'admin']);
Role::create(['name' => 'user']);
Langkah 2 - Membuat Seeder Permission
Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.
php artisan make:seed PermissionsTableSeeder
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 1 file baru dengan nama PermissionsTableSeeder.php
yang berada di dalam folder database/seeders
. Silahkan buka file tersebut, kemudian ubah semua kode-nya menjadi seperti berikut ini :
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class PermissionsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//permission users
Permission::create(['name' => 'users index', 'guard_name' => 'web']);
Permission::create(['name' => 'users create', 'guard_name' => 'web']);
Permission::create(['name' => 'users edit', 'guard_name' => 'web']);
Permission::create(['name' => 'users delete', 'guard_name' => 'web']);
//permission roles
Permission::create(['name' => 'roles index', 'guard_name' => 'web']);
Permission::create(['name' => 'roles create', 'guard_name' => 'web']);
Permission::create(['name' => 'roles edit', 'guard_name' => 'web']);
Permission::create(['name' => 'roles delete', 'guard_name' => 'web']);
//permission permissions
Permission::create(['name' => 'permissions index', 'guard_name' => 'web']);
Permission::create(['name' => 'permissions create', 'guard_name' => 'web']);
Permission::create(['name' => 'permissions edit', 'guard_name' => 'web']);
Permission::create(['name' => 'permissions delete', 'guard_name' => 'web']);
}
}
Dari perubahan kode di atas, pertama kita import Model Permission
dari Laravel Spatie Permission.
use Spatie\Permission\Models\Permission;
Kemudian di dalam method run
kita menambahkan banyak sekali list permissions yang nantinya kita gunakan di dalam aplikasi.
Langkah 3 - Membuat Seeder User
Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.
php artisan make:seed UserTableSeeder
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 1 file baru dengan nama UserTableSeeder.php
yang berada di dalam folder database/seeders
. Silahkan buka file tersebut, kemudian ubah kode-nya menjadi seperti berikut ini :
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//create user
$user = User::create([
'name' => 'Syahrizaldev',
'email' => 'izaldev@gmail.com',
'password' => bcrypt('password'),
]);
//get all permissions
$permissions = Permission::all();
//get role admin
$role = Role::find(1);
//assign permission to role
$role->syncPermissions($permissions);
//assign role to user
$user->assignRole($role);
}
}
Dari perubahan kode di atas, pertama kita import Model User
terlebih dahulu, karena kita akan gunakan untuk melakukan insert data user baru ke dalam database.
use App\Models\User;
Setelah itu, kita import Model Role
dan Permission
dari Laravel Spatie Permission.
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
Di dalam method run
, pertama kita melakukan insert data user baru ke dalam database menggunakan Eloquent.
public function run(): void
{
//create user
$user = User::create([
'name' => 'Syahrizaldev',
'email' => 'izaldev@gmail.com',
'password' => bcrypt('password'),
]);
//get all permissions
$permissions = Permission::all();
//get role admin
$role = Role::find(1);
//assign permission to role
$role->syncPermissions($permissions);
//assign role to user
$user->assignRole($role);
}
Setelah data user berhasil di insert ke dalam database, maka selanjutnya kita akan melakukan get semua data permissions yang ada.
//get all permissions
$permissions = Permission::all();
Kemudian kita cari role dengan ID 1.
//get role admin
$role = Role::find(1);
Setelah itu, kita melakukan assign semua permissions yang ada ke dalam role tersebut menggunakan method syncPermissions.
//assign permission to role
$role->syncPermissions($permissions);
Setelah role tersebut sudah memiliki semua hak akses, maka selanjutnya kita tinggal melakukan assign role tersebut ke dalam user yang kita insert di atas.
//assign role to user
$user->assignRole($role);
Langkah 4 - Register Seeder
Setelah berhasil membuat seeder user, sekarang kita akan register di dalam class DatabaseSeeder
. Silahkan buka file database/seeders/DatabaseSeeder.php
, kemudian ubah kode-nya menjadi seperti berikut ini :
<?php
namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call(RolesTableSeeder::class);
$this->call(PermissionsTableSeeder::class);
$this->call(UserTableSeeder::class);
}
}
Di atas, kita telah memanggil class RolesTableSeeder
, PermissionsTableSeeder
, UserTableSeeder di dalam method run. Dan untuk urutannya jangan sampai keliru ya. Karena prosesnya akan dieksekusi secara berurutan.
Langkah 5 - Menjalankan Migration dan Seeder
Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel-nya.
php artisan migrate --seed
Perintah di atas akan menjalankan migration table dan kita tambahkan flag -- seed
yang artinya sekaligus menjalankan perintah database seeder.
Kesimpulan
Pada artikel ini, kita telah belajar Seeder Di Laravel.
Jika teman-teman ada kendala saat belajar, silahkan bisa bertanya melalui kolom komentar atau group Telegram SantriKoding.
Semoga bermanfaat! 😊