Seeding Faker Laravel – Halo semuanya.. Kali ini kita akan membahas Seeding dan Faker pada Laravel..
Apa itu Seeding? Apa itu Faker? Mari kita bahas terlebih dahulu tentang definisi nya..
Seeding Faker Laravel – Apa itu Seeding?
Seeding adalah suatu fitur yang sudah tersedia pada Laravel untuk memasukkan data kedalam database, baik itu satu data atau banyak data..
Data yang dimasukkan biasanya adalah data random atau data testing untuk kebutuhan development..
Kita hanya tinggal menjalankan perintah php artisan saja, maka kita akan bisa generate banyak data sekaligus, untuk detail cara penggunaan nya nanti akan kita bahas juga..
Jadi cara seeding ini sangat mempermudah kita ketika kita ingin membuat sebuah dummy data..
Misalkan anggap saja kita sedang membuat sebuah sistem inventory, dimana kita pastinya butuh banyak data master product untuk testing modul-modul lain yang berhubungan data produk tersebut..
Nah disinilah peran seeding akan sangat diperlukan..
Untuk membaca dokumentasi resmi tentang seeding bisa kamu baca langsung di website official nya laravel disini..
Apa itu Faker?
Nah sekarang apa itu Faker??
Faker adalah suatu library yang ada pada Laravel, fungsinya adalah sama seperti seeding yaitu untuk memasukkan dummy data ke dalam database..
Tapi data yang dimasukkan bukanlah data asal-asalan, tapi data seperti asli..
Misal kamu ingin memasukkan data siswa yang ada nama dan alamat nya, dengan faker kamu bisa memasukan ratusan data atau bahkan ribuan data dengan nama dan alamat seperti asli..
Jadi seeding dan faker ini sudah seperti satu kesatuan yang tak terpisahkan..
Dan di laravel pun kita tinggal gunakan aja fitur faker ini, kita tidak perlu instalasi apapun lagi..
Untuk membaca informasi resmi tentang faker bisa kamu lihat disini..
Cara penggunaan Seeding di Laravel
Untuk cara penggunaan nya kita masih menggunakan studi kasus pada postingan yang sebelum nya yaa.. Belajar CRUD Laravel dari 0 Sampai Mahir..
Dimana sebelumnya kita sudah memiliki table siswas seperti berikut:

Bagi teman-teman yang tidak mengikuti serial sebelum nya, silahkan bisa buat table siswas seperti diatas dengan ketentuan seperti berikut:
Name | Type | Attributes | Is Null? | Extras |
---|---|---|---|---|
id | bigint | unsigned | no | AUTO_INCREMENT |
nama | varchar(255) | no | ||
nisn | varchar(255) | no | ||
no_hp | varchar(255) | no | ||
varchar(255) | no | |||
alamat | text | yes | ||
created_at | timestamp | yes | ||
updated_at | timestamp | yes |
Setelah table nya terbentuk, sekarang kita mulai untuk membuat file seeding nya..
Teman-teman silahkan buka CMD atau terminal nya, arahkan ke direktori/folder project kita, kemudian ketikkan perintah
php artisan make:seeder Siswa_Seeder
Setelah perintah diatas dijalankan, maka kita akan langsung memiliki file seeder baru.. Untuk letaknya berada di:
../database/seeders/Siswa_Seeder.php
Sekarang kita coba buka file tersebut dan secara default akan berbentuk seperti ini:
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class Siswa_Seeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } }
Di atas kita sudah secara otomatis memanggil atau meng-extends class Seeder dari laravel nya..
.... use Illuminate\Database\Seeder; ....
Kemudian didalam nya juga sudah terinisialisasi class Siswa_Seeder yang sudah mengextends Seeder nya..
.... class Siswa_Seeder extends Seeder{ ....
Kemudian didalam Class Siswa_Seeder terdapat sebuah function yang bernama run(), di function inilah nanti kita akan menuliskan data-data yang akan kita masukkan kedalam database nya..
.... public function run() { // } ....
Sebagai contoh sekarang kita coba ketikkan perintah seperti berikut kedalam function run nya:
.... public function run() { // insert ke table siswas \DB::table('siswas')->insert([ 'nama'=>'azqiara', 'nisn'=>'16112019', 'no_hp'=>'089608324', 'email'=>'zia@yahoo.com', 'alamat'=>'Bekasi', 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s') ]); } ....
Di atas kita memasukkan perintah kedalam function run, yaitu berupa query builder insert data kedalam table siswas, kita mendefine value untuk nama, nisn, no_hp, email, alamat, created_at dan updated_at..
Sekarang selanjutnya kita akan coba jalankan function run nya, untuk menjalankan nya kita gunakan lagi perintah php artisan di cmd/terminal kita dengan perintah berikut:
php artisan db:seed --class=Siswa_Seeder

Perintah diatas akan menjalankan seeding untuk file Class Siswa_Seeder..
Jika teman-teman memiliki banyak file seeder, cukup gunakan perintah:
php artisan db:seed
Maka dengan perintah di atas semua file seeder akan dijalankan..
Sekarang kita coba cek di database nya, seharusnya datanya akan bertambah 1 row sesuai dengan yang sudah kita define sebelum nya..

Sampai sini apakah teman-teman sudah paham tentang fungsinya seeder? Simple nya sih sebetulnya untuk membuat dummy data kedalam suatu table..
Sekarang bagaimana kalo misalkan kita mau memasukkan puluhan data atau ratusan data? Caranya kita bisa bungukus dengan perintah for..
Sebagai contoh kita akan coba masukkan 10 data sekaligus kedalam table siswas nya, kita modifikasi function run nya menjadi seperti berikut:
....
public function run() { // insert ke table siswas for ($i=1; $i <= 10; $i++) { \DB::table('siswas')->insert([ 'nama'=>'azqiara', 'nisn'=>'16112019', 'no_hp'=>'089608324', 'email'=>'zia@yahoo.com', 'alamat'=>'Bekasi', 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s') ]); } }
....
Coba kita perhatikan, query builder insert yang sebelum nya kita buat, kali ini kita bungkus kedalam perintah for, tujuan nya agar perintah tersebut berulang sebanyak 10 kali, efeknya yaitu insert data ke dalam table siswas nya pun akan menjadi sebanyak 10 kali..
Sekarang coba kita jalankan lagi perintah php artisan nya:
php artisan db:seed --class=Siswa_Seeder
Kemudian cek ke dalam table siswas nya, maka seharusnya akan bertambah 10 data..

Kita bisa lihat bahwa data nya sudah masuk kedalam table siswas..
Tapi yang jadi masalah nya adalah nilai dari data tersebut semua nya sama.. nama nya sama, nisn nya sama, no hp, email dan alamat nya juga sama..
Nah dari masalah tersebut lah peran Faker dibutuhkan, jadi dengan Faker kita bisa memanipulasi value dari setiap kolom seperti data asli..
Penasaran?? Kita langsung eksekusi aja cara penggunaan nya..
Cara menggunakan Faker di Laravel
Seperti yang sudah saya jelaskan sebelum nya bahwa Faker ini adalah sebuah library PHP yang digunakan untuk membuat dummy data, tapi nilai dari data tersebut tidaklah asal-asalan, melainkan seperti data asli..
Dan library ini sudah tersedia berbarengan saat kita instalasi laravel nya, jadi langsung tinggal pakai saja..
Langsung saja yaa.. anggap saja kali ini kita akan menggenerate 100 data dummy untuk table siswas..
Kita buka kembali file seeder nya..
../database/seeders/Siswa_Seeder.php
Kemudian modifikasi seperti berikut:
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Faker\Factory as Faker; class Siswa_Seeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // insert ke table siswas $faker = Faker::create('id_ID'); for ($i=1; $i <= 100; $i++) { \DB::table('siswas')->insert([ 'nama'=>$faker->name, 'nisn'=>$faker->randomNumber, 'no_hp'=>$faker->phoneNumber, 'email'=>$faker->email, 'alamat'=>$faker->address, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s') ]); } } }
Pertama yang perlu kita lakukan adalah memanggil Class Factory nya terlebih dahulu yang kemudian kita kasih intial Faker..
.... use Faker\Factory as Faker; ....
Kemudian didalam function run kita define variable baru yaitu $faker, dimana variable tersebut berisi initialisasi Create Faker..
.... $faker = Faker::create('id_ID'); ....
Didalam function create bisa kita inisialisai kode negara nya, disini saya masukkan kode indonesia “id_ID”..
Maka nanti data-data yang dimasukkan adalah data-data yang bersumber dari Indonesia, misalkan nama nya adalah nama Indonesia, alamat nya adalah alamat negara Indonesia, no hp nya no hp Indonesia, dan sebagai nya..
Untuk cara menggunakan nya juga sangat mudah, misal kita ingin memanggil nama seseorang bisa dengan menggunakan perintah $faker->name, kalo alamat $faker->address, no hp dengan $faker->phoneNumber, dsb.. Jelas nya bisa dilihat seperti berikut:
.... $faker = Faker::create('id_ID'); for ($i=1; $i <= 100; $i++) { \DB::table('siswas')->insert([ 'nama'=>$faker->name, 'nisn'=>$faker->randomNumber, 'no_hp'=>$faker->phoneNumber, 'email'=>$faker->email, 'alamat'=>$faker->address, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s') ]); } ....
Diatas kita bungkus juga kedalam perulangan for sebanyak 100 kali, ini artinya kita akan memasukkan data dummy sebanyak 100 data kedalam table siswas nya..
Sekarang jalankan lagi perintah seeding nya, kemudian cek kembali isi dari table siswas nya..
php artisan db:seed --class=Siswa_Seeder
Cek table siswas:

Gimana? Keren kan? kita bisa lihat nama, email, dan alamat nya sudah seperti data asli..
Untuk perintah-perintah lain dari Faker seperti untuk menampilkan fake data tanggal lahir, data nama jalan, data dummy credit card atau yang lainnya, akan kita bahas di point selanjut nya yaa..
Contoh lain memanggil fake data dengan Faker
Setiap kita menggenarete sebuah properti seperti nama, alamat, nomor telepon dan yang lainnya dengan menggunakan Faker, itu disebut sebagai “Formatters”..
Nah Faker sendiri memiliki banyak sekali Formatters yang sudah siap pakai, jadi ga cuma nama, alamat, dan no hp saja yang bisa dibuat data dummy, tapi hal-hal yang lain juga bisa..
Berikut sudah mimin rangkum beberapa Formatter yang sekira nya akan sering digunakan oleh para developer, apa sajakah itu?? Mari kita bahas..
Formatter untuk angka
Sebetulnya ada banyak sekali formatter untuk random number, sebagian contoh nya adalah seperti berikut:
randomDigit // 7 randomDigitNot(5) // 0, 1, 2, 3, 4, 6, 7, 8, or 9 randomDigitNotNull // 5 randomNumber($nbDigits = NULL, $strict = false) // 79907610 randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL) // 48.8932 numberBetween($min = 1000, $max = 9000) // 8567
Formatter untuk keterangan paragraph biasa
word // 'aut' words($nb = 3, $asText = false) // array('porro', 'sed', 'magni') sentence($nbWords = 6, $variableNbWords = true) // 'Sit vitae voluptas sint non voluptates.' sentences($nb = 3, $asText = false) // array('Optio quos qui illo error.', 'Laborum vero a officia id corporis.', 'Saepe provident esse hic eligendi.') paragraph($nbSentences = 3, $variableNbSentences = true) // 'Ut ab voluptas sed a nam. Sint autem inventore aut officia aut aut blanditiis. Ducimus eos odit amet et est ut eum.' paragraphs($nb = 3, $asText = false) // array('Quidem ut sunt et quidem est accusamus aut. Fuga est placeat rerum ut. Enim ex eveniet facere sunt.', 'Aut nam et eum architecto fugit repellendus illo. Qui ex esse veritatis.', 'Possimus omnis aut incidunt sunt. Asperiores incidunt iure sequi cum culpa rem. Rerum exercitationem est rem.') text($maxNbChars = 200) // 'Fuga totam reiciendis qui architecto fugiat nemo. Consequatur recusandae qui cupiditate eos quod.'
Formatter untuk nama/panggilan seseorang
Selain bisa menggenerate nama nya, kita juga bisa menggenerate untuk title panggialan nya, misal Tn/Nyonya dsb..
title($gender = null|'male'|'female') // 'Ms.' titleMale // 'Mr.' titleFemale // 'Ms.' suffix // 'Jr.' name($gender = null|'male'|'female') // 'Dr. Zane Stroman' firstName($gender = null|'male'|'female') // 'Maynard' firstNameMale // 'Maynard' firstNameFemale // 'Rachel' lastName // 'Zulauf'
Formatter untuk alamat seseorang
Formatter untuk generate alamat tempat tinggal seseorang, bisa untuk alamat lengkap nya, nama jalan nya aja, kota, kode pos, negara, bahkan latitude dan longitude nya pun bisa kita generate..
cityPrefix // 'Lake' secondaryAddress // 'Suite 961' state // 'NewMexico' stateAbbr // 'OH' citySuffix // 'borough' streetSuffix // 'Keys' buildingNumber // '484' city // 'West Judge' streetName // 'Keegan Trail' streetAddress // '439 Karley Loaf Suite 897' postcode // '17916' address // '8888 Cummings Vista Apt. 101, Susanbury, NY 95473' country // 'Falkland Islands (Malvinas)' latitude($min = -90, $max = 90) // 77.147489 longitude($min = -180, $max = 180) // 86.211205
Formatter untuk Phone Number
Di format ini bisa digunakan untuk menggenerate no hp, no telepon, bisa juga dengan kode negara nya..
phoneNumber // '201-886-0269 x3767' tollFreePhoneNumber // '(888) 937-7238' e164PhoneNumber // '+27113456789'
Formatter untuk perusahaan
Kalo ini formatter untuk misalkan nama perusahaan, atau nama pekerjaan atau nama jabatan pada bidang pekerjaan seseorang..
catchPhrase // 'Monitored regional contingency' bs // 'e-enable robust architectures' company // 'Bogan-Treutel' companySuffix // 'and Sons' jobTitle // 'Cashier'
Formatter untuk text bebas..
Sebetulnya hampir sama seperi formatter lorem..
realText($maxNbChars = 200, $indexSize = 2) // "And yet I wish you could manage it?) 'And what are they made of?' Alice asked in a shrill, passionate voice. 'Would YOU like cats if you were never even spoke to Time!' 'Perhaps not,' Alice replied."
Formatter untuk datetime
Untuk format tanggal atau waktu, tinggal disesuikan sendiri saja..
unixTime($max = 'now') // 58781813 dateTime($max = 'now', $timezone = null) // DateTime('2008-04-25 08:37:17', 'UTC') dateTimeAD($max = 'now', $timezone = null) // DateTime('1800-04-29 20:38:49', 'Europe/Paris') iso8601($max = 'now') // '1978-12-09T10:10:29+0000' date($format = 'Y-m-d', $max = 'now') // '1979-06-09' time($format = 'H:i:s', $max = 'now') // '20:49:42' dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = null) // DateTime('2003-03-15 02:00:49', 'Africa/Lagos') dateTimeInInterval($startDate = '-30 years', $interval = '+ 5 days', $timezone = null) // DateTime('2003-03-15 02:00:49', 'Antartica/Vostok') dateTimeThisCentury($max = 'now', $timezone = null) // DateTime('1915-05-30 19:28:21', 'UTC') dateTimeThisDecade($max = 'now', $timezone = null) // DateTime('2007-05-29 22:30:48', 'Europe/Paris') dateTimeThisYear($max = 'now', $timezone = null) // DateTime('2011-02-27 20:52:14', 'Africa/Lagos') dateTimeThisMonth($max = 'now', $timezone = null) // DateTime('2011-10-23 13:46:23', 'Antarctica/Vostok') amPm($max = 'now') // 'pm' dayOfMonth($max = 'now') // '04' dayOfWeek($max = 'now') // 'Friday' month($max = 'now') // '06' monthName($max = 'now') // 'January' year($max = 'now') // '1993' century // 'VI' timezone // 'Europe/Paris'
Formatter Payment
Data dummy untuk jenis pembayaran, kita bisa memanggil jenis kartu kredit nya, nomor kartu kredit nya, bahkan ED nya..
creditCardType // 'MasterCard' creditCardNumber // '4485480221084675' creditCardExpirationDate // 04/13 creditCardExpirationDateString // '04/13' creditCardDetails // array('MasterCard', '4485480221084675', 'Aleksander Nowak', '04/13') // Generates a random IBAN. Set $countryCode to null for a random country iban($countryCode) // 'IT31A8497112740YZ575DJ28BP4' swiftBicNumber // 'RZTIAT22263'
Formatter untuk generate dummy image
Ini adalah salah satu formatter favorit mimin, kita bisa menggenerate gambar juga, dan untuk pilihan data nya terdapat 2 jenis, yang pertama dengan full url, atau yang kedua menggunakan base url web kita..
// Image generation provided by LoremPixel (http://lorempixel.com/) imageUrl($width = 640, $height = 480) // 'http://lorempixel.com/640/480/' imageUrl($width, $height, 'cats') // 'http://lorempixel.com/800/600/cats/' imageUrl($width, $height, 'cats', true, 'Faker') // 'http://lorempixel.com/800/400/cats/Faker' imageUrl($width, $height, 'cats', true, 'Faker', true) // 'http://lorempixel.com/gray/800/400/cats/Faker/' Monochrome image image($dir = '/tmp', $width = 640, $height = 480) // '/tmp/13b73edae8443990be1aa8f1a483bc27.jpg' image($dir, $width, $height, 'cats') // 'tmp/13b73edae8443990be1aa8f1a483bc27.jpg' it's a cat! image($dir, $width, $height, 'cats', false) // '13b73edae8443990be1aa8f1a483bc27.jpg' it's a filename without path image($dir, $width, $height, 'cats', true, false) // it's a no randomize images (default: `true`) image($dir, $width, $height, 'cats', true, true, 'Faker') // 'tmp/13b73edae8443990be1aa8f1a483bc27.jpg' it's a cat with 'Faker' text. Default, `null`.
Formatter untuk generate Barcode
ean13 // '4006381333931' ean8 // '73513537' isbn13 // '9790404436093' isbn10 // '4881416324'
Formatter untuk NPWP atau VAT
<?php echo $faker->vat; // "BG 0123456789" - Bulgarian Value Added Tax number echo $faker->vat(false); // "BG0123456789" - unspaced Bulgarian Value Added Tax number
Formatter untuk bank account number
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "FI8350799879879616"
Nah itu dia sebagian formatter yang sudah mimin rangkum dari halaman resmi nya..
Kalo temen-temen ingin tau tentang formatter lain nya yang lebih lengkap, kalian bisa kunjungi halaman resmi nya disini..
Mungkin itu saja untuk pembahasan kali ini dari saya..
Jadi untuk kesimpulan nya, Teknih Seeding dan Faker ini sangat diperlukan ketika kalian ingin melakukan testing sistem yang membutuhkan banyak data..
Dengan fitur ini, kalian ga perlu lagi repot-report menginput data nya secara manual, apalagi jika data yang dibutuhkan adalah data yang seperti asli, silahkan tinggal gunakan fitur Faker saja..
Semoga mudah dipahami yaa, jika ada yang ingin ditanya, silahkan bertanya di kolom komentar..
Sekian dan terima kasih..
Wassalam..
Support Us
Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid
Terima kasih..
[…] Baca Juga : Belajar Seeding dan Faker di Laravel dari 0.. […]
[…] Oleh karena itu sekarang kalian isi dulu table tests dengan dummy data, kalian bisa gunakan teknik Seeding Faker pada Laravel yang sudah kita bahas pada postingan sebelumnya: Belajar Seeding dan Faker pada Laravel.. […]
[…] Datanya pun tidak asal-asalan, tapi seperti data asli, mau tau cara nya?? Silahkan kalian pelajari Seeding dan Faker pada Laravel.. […]
[…] Untuk mengisi data dummy, kita sudah pernah membahasnya disini, silahkan kalian kunjungi Belajar Seeding dan Faker di Laravel dari 0.. […]
[…] Keren kan?? Kamu bisa pelajari Faker Laravel disini.. […]
[…] Setelah database nya terhubung dan juga table nya terbentuk, sekarang kita isi table siswas nya dengan data dummy, kalian bisa gunakan teknik seeding dan factory, untuk tutorialnya sudah saya buatkan, silahkan kalian kunjungi disini.. […]