Mengetahui Hubungan Seeder dan Factories - Dunia Laravel
Database isinya itu ada DDL (Data Definition Language) dan DML (Data Manipulation Language). Di artikel yang sebelumnya, kita udah belajar gimana caranya buat DDL atau struktur databasenya.
Sekarang di artikel ini kita bakal isi tablenya
dengan isi isi-an. Tapi yang kita buat sekarang bukanlah CRUD. Kita akan
mencoba fitur laravel yang bernama “Seeding”.
Table of Contents
- What is Seeding?
- How to Use?
- Create Seeder and Factories
- What's Next?
What is Seeding?
Seeding itu proses pengisian table pada database
kalian menggunakan isi isi-an atau bisa di bilang data dummy. Tapi isinya ini bukan sembarang isi. Seeding bukan cuma asal
random string atau number. Seeding juga bisa random data yang mendekati real
dengan bantuan dari model factories.
Jadi di sini nanti kita mau coba buat
Seeding sama Factories. Kalian bisa lihat file nya di database/seeds dan database/factories. Di sana kalian
udah punya DatabaseSeeder.php
dan UserFactory.php yang merupakan
file bawaan dari laravel saat kalian buat project.
How to Use?
Cara buat file seeder bisa pake perintah artisan
php artisan make:seeder FileSeeder
Perintah artisan diatas nanti bakal ngebuat file seeder bernama
‘FileSeeder.php’. Tapi sekarang kita ga akan pake file baru. Kita akan
coba-coba pake file ‘DatabaseSeeder.php’ yang udah ada.
Ada beberapa cara buat input data ke database pake seeder. Yang
pertama dengan cara manual atau input satu per satu.
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'email_verified_at' => now(),
'password' => Hash::make('password'),
'remember_token' => Str::random(10),
]);
}
Code diatas kalian masukin di bagian fungsi run() punya DatabaseSeeder.php . Dari code itu akan dibuat nama dengan
random 10 karakter string, email dengan random 10 karakter string ditambah
‘@gmail.com’, dan seterusnya. Untuk menjalankan seeder ini kita bisa pake
php artisan db:seed
php artisan db:seed --class=UserSeeder
Perintah --class di pake buat menspesifikasikan
class seeder mana yang mau di run atau di gunakan. Kalo ga pake --class secara otomatis seeder yang di jalankan
adalah DatabaseSeeder.php. Pastikan database kalian aktif ya… Kalo
sukses kalian bisa coba cek di localhost database kalian.
Itu masukinnya emang harus satu-satu? Yup, kalo pake cara kaya
gitu harus satu per satu. Tapi laravel tahu kalo cara gitu ngerepotin. Jadi dia
bikin cara lain yang bisa bantu input banyak data sekaligus. Sekaranglah
saatnya kita coba model factories.
Sama kaya seeder, kita coba pake factory yang sebelumnya udah
dibuat sama laravel yang ada di folder database/factories. Tapi kalo mau pake ini kalian juga harus punya model yang ada di folder App/. Di situ udah ada model yang namanya User.php, model ini yang nantinya kita pake.
Disana udah ada codenya buat input data user. Kalian cuma
tinggal panggil factorynya di file seeder kalian.
public function run()
{
factory(\App\User::class, 10)->create();
}
Code diatas bisa kalian
masukin di file DatabaseSeeder.php gantiin code yang
sebelumnya. Coba kalian jalanin lagi perintah artisannya. Kalo sukses data di
database kalian pasti nambah 10.
Kalian bisa perhatikan kalo data yang di generate bukan data sembarang
lagi kaya yang di row 1. Kenapa bisa gitu? Karena pada file factories ada
package faker. Package ini yang
ngebuat data dummy itu jadi keliatan agak real.
Create Seeder and Factories
Kalian udah ada gambaran seeder sama factories kan… sekarang
coba kita buat punya kita sendiri. Di sini aku pake database yang sebelumnya
udah dibuat di artikel migration. Jadi aku udah punya table materi, dan table
materi ini yang nanti aku buat seeder sama factoriesnya.
Pertama hal yang perlu kita siapin adalah modelnya. Kalian bisa
buat model pake perintah artisan.
php artisan make:model Materi
Perintah itu nanti bakal ngebuat model materi. Coba kalian buka
filenya trus masukin kode berikut buat ngedefinisiin table yang mau di pake.
class Materi extends Model
{
protected $table='materi';
}
Setelah itu kita buat factories-nya pake perintah artisan juga.
php artisan make:factories MateriFactory
Perintah itu nantinya bakal ngebuat factories dengan nama
‘MateriFactory’. Langsung aja kita buat factories-nya.
use App\Materi;
use App\User;
use Faker\Generator as Faker;
$factory->define(Materi::class, function (Faker $faker) {
$users = User::all()->toArray();
$rand = rand(1,10);
return [
'judul' => $faker->sentence,
'pengarang' => $users[$rand]['name'],
'tipe' => $faker->word,
'deskripsi' => $faker->text($maxNbChars = 100),
'tgl_publish' => now(),
'user_id' => $users[$rand]['id'],
];
});
Code kali ini agak ribet disbanding yang bawaan laravel tadi
karena table yang ada itu menggunakan foreign
key. Jadi otomatis data yang diambil harus berasal dari table yang lainnya,
ga bisa asal input.
Pertama package tambahan yang di pake ada model Materi dan model
User. Model User di pake buat ambil data ‘nama’ nya buat di jadiin ‘nama pengarang’
di table ini. Kemudian itu juga berfungsi buat cari id user.
Selanjutnya adalah pembuatan seeder. Buat seeder pake nama ‘MateriSeeder’.
php artisan make:seeder MateriSeeder
Isi dari ‘MateriSeeder’ cukup simple… yaitu
public function run()
{
factory(\App\Materi::class, 10)->create();
}
Tidak jauh beda dengan seeder user tadi, hanya mengganti di bagian
nama modelnya yang tadinya ‘User’ jadi ‘Materi’.
Kalo udah lengkap, kita tinggal jalanin perintah artisan
php artisan db:seed --class=MateriSeeder
Kalo sukses kalian bisa langsung cek di localhost database
kalian.
Karena cara ini di pake
buat testing aja… Cara ini bukanlah cara wajib yang perlu kalian ikutin kalo
mau buat CRUD. Tapi ini bisa menambah cepet kerja kalian.
Jadi 2 hal ini biasanya di pake buat testing data. Misal suatu
ketika kalian perlu mencoba proses get data namun ternyata belum ada data di
database maka kalian bisa pake cara ini.
What’s Next?
Kamingsun



Komentar
Posting Komentar