Seeding pada laravel adalah sebuah fitur untuk mengisi data pada database dengan Data Dummy atau data testing.
Jika migrations berfungsi untuk menjalankan DDL (Data Definition Language), maka database seeder pada Laravel berfungsi untuk menjalankan DML (Data Manipulation Language).
Database seeder sangat berguna untuk membuat data pada tabel ketika melakukan pengembangan pada aplikasi atau sistem informasi. Input data ke database dengan cepat menggunakan Seeding Laravel.
Misal kita membutuhkan 100 data User yang akan kita jadikan sebagai data testing pada aplikasi yang sedang kita bangun, maka kita bisa generate data user menggunakan fitur Database Seeder Laravel dengan menjalankan Library PHP Faker yg sudah diterapkan pada Laravel.
Faker adalah Library PHP yang berguna untuk membuat data palsu. Faker mampu meng-generate ratusan bahkan ribuan data testing secara acak. Faker akan meng-generate data secara otomatis dan data yang di generate oleh Faker pun bukan asal-asalan bahkan datanya persis seperti data asli.
Cara Menggunakan Seeding pada Laravel
Disini kita masih menggunakan project ANISA yang sudah kita buat pada tutorial sebelumnya Tutorial CRUD Laravel.
Atau Anda sudah punya project laravel sebelumnya silahkan sesuaikan saja dengan project Laravel Anda.
Berikut cara membuat seeding Laravel:
1. Langkah pertama, kita buat database dan tabelnya. Disini Kita menggunakan tabel santri yg sudah kita buat pada tutorial sebelumnya. Kita akan membuat data santri secara otomatis dengan menggunakan Seeder dari Laravel.
2. Membuat Model untuk tabel santri, Model Santri nantinya pasti akan digunakan pada aplikasi. Tentunya, model ini juga akan digunakan pada model factory.
Buka terminal lalu masuk ke direktori project nya. Buat model dengan perintah berikut:
php artisan make:model SantriModel
Maka file bernama SantriModel.php otomatis dibuat pada direktori app/Models/SantriModel.php
Isi dari file model SantriModel.php seperti berikut:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SantriModel extends Model
{
use HasFactory;
protected $table = 'santri';
protected $primaryKey = 'id_santri';
protected $fillable = ['nm_santri', 'tmp_lahir', 'tgl_lahir', 'alamat', 'no_hp'];
}
3. Membuat Seeders, buka terminal lalu masuk ke direktori project nya.
Kita generate sebuah seeder dengan menjalankan perintah berikut ini:
php artisan make:seeder SantriSeeder
Maka akan dibuat sebuah file seeder SantriSeeder.php secara otomatis pada direktori database/seeders/SantriSeeder.php
Kemudian buka file SantriSeeder.php tersebut isikan dengan kode berikut:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class SantriSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
\App\Models\SantriModel::factory(10)->create();
}
}
Perhatikan kode seeder di atas, pada bagian kode program factory(10)->create()
ada angka 10, hal itu digunakan untuk menentukan jumlah dummy data yang ingin kita masukan.
4. Selanjutnya, kita perlu membuat file factory di mana kita akan menggunakan Library Faker yang menghasilkan data palsu.
Membuat factory dengan menggunakan perintah berikut:
php artisan make:factory SantriModelFactory --model=SantriModel
Maka secara otomatis dibuat file bernama SantriModelFactory.php pada direktori database/factories/SantriModelFactory.php
Isi dari SantriModelFactory.php seperti kode di bawah ini:
<?php
namespace Database\Factories;
use App\Models\SantriModel;
use Illuminate\Database\Eloquent\Factories\Factory;
class SantriModelFactory extends Factory
{
/
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = SantriModel::class;
/
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'nm_santri' => $this->faker->name(),
'tmp_lahir' => $this->faker->city(),
'tgl_lahir' => $this->faker->date($format='Y-m-d', $max='now'),
'alamat' => $this->faker->address(),
'no_hp' => $this->faker->phoneNumber()
];
}
}
5. Sekarang kita tinggal menjalankan Seeding Laravel yang sudah kita buat di atas dengan perintah berikut di terminal:
php artisan db:seed --class=SantriSeeder
Coba buka database lihat pada tabel santri. Maka data santri berhasil di buat secara otomatis.
Generate Data User pada Laravel
Data User seperti data nama, username, email, password (Hash) juga dapat kita buat dengan menggunakan Database Seeding Laravel.
Cara Generate data user pada laravel menggunakan seeder:
1. Menyiapkan tabel users, tabel ini sudah disediakan oleh Laravel dengan menjalankan php artisan migrate
pada project laravel.
2. Menyiapkan model users, model untuk tabel users juga sudah disediakan oleh laravel ketika kita create project laravel dengan nama file User.php
Coba lihat modelnya pada direktori app/Models/User.php
Kita tidak perlu menambahkan lagi isi dari model User.php karena sudah default dari laravel.
Isi default dari model User.php adalah seperti berikut:
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
3. Membuat Seeders, file ini sudah tersedia dalam project laravel Anda dengan nama file DatabaseSeeder.php.
Aktifkan kode program yang di comment pada bagian berikut, hilangkan tanda // di awal kode:
// \App\Models\User::factory(10)->create();
Sehingga isi dari file DatabaseSeeder.php menjadi seperti berikut:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
\App\Models\User::factory(10)->create();
}
}
Perhatikan kode seeder di atas, pada bagian kode program factory(10)->create()
ada angka 10, hal itu digunakan untuk menentukan jumlah dummy data user yang ingin kita masukan.
4. Selanjutnya kita buat file factory. Sebuah file dengan nama UserFactory.php sudah ada dalam project laravel kita dan tinggal kita gunakan saja.
Karena kita akan meng-generate password dengan menggunakan Laravel Hashing maka perlu kita tambahkan kode berikut pada bagian atas:
use Illuminate\Support\Facades\Hash
Isi kode full dari file UserFactory.php adalah seperti dibawah ini:
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => Hash::make('12345678') // password
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
public function unverified()
{
return $this->state(function (array $attributes) {
return [
'email_verified_at' => null,
];
});
}
}
Perhatikan file factory di atas, perhatikan pada bagian kode program berikut:
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => Hash::make('12345678') // password
'remember_token' => Str::random(10),
];
Silahkan field-filed yang ada di atas Anda sesuaikan dengan field tabel users pada project laravel Anda.
5. Sekarang kita tinggal menjalankan Seeding Laravel dengan perintah berikut:
php artisan db:seed
Maka data user sudah berhasil dibuat beserta password masing-masing user adalah 12345678.
Sampai disini kita sudah berhasil Membuat Seeder, Faker, dan Factory Laravel.
izin bertanya kak untuk UserFactory nya di buat dimana ya kak