Laravel Inertia Spatie #4 Laravel Seeder


Laravel Inertia Spatie #4 Laravel Seeder

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! 😊


Syahrizal AS
Back End Developer

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami