Pada tutorial laravel kali ini kita akan mempelajari bagaimana cara untuk men-generate data dummy pada Laravel 5. Hal ini sangat penting sekali, karena dalam hal testing fitur tertentu, kita membutuhkan data. Seperti fitur pagination, misalnya. Atau di saat yang lain kita ingin memeriksa performa database, relasi, dan lain sebagainya.
Kita mungkin bisa membuat fake data secara manual memanfaatkan laravel database seeder. Itu kalau datanya masih sedikit. Kita bisa buat satu-persatu. Tapi kalau datanya ratusan? ribuan? puluhan ribu? Apa iya kita mau membuat data dummy itu secara manual?!
Untungnya di laravel 5, fitur untuk men-generate data dummy ini sudah ada out of the box, jadi kita tidak perlu repot-repot untuk melakukannya.
Simak pembahasannya berikut ini!
Laravel Factory
Model Factory adalah fitur seksi dari laravel yang membolehkan kita untuk membuat fake model (atau fake data) dengan cepat dan praktis. Tugas kita hanya mendefinisikan “isi” dari setiap kolom dari tabel kita, lalu kita akan menemukan Laravel membuatkan data fake yang sesuai dengan apa yang kita inginkan.
Untuk membuat kita lebih paham, secara default laravel sudah menyediakan contohnya untuk kita. Buka file database/factories/UserFactory.php
. Anda akan melihat kode program seperti ini:
<?php
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
static $password;
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => str_random(10),
];
});
Kita bisa mencoba menggunakan model factory
di atas (yang sudah default ada) untuk men-generate data user secara fake dengan melakukan hal berikut:
- Jalankan perintah php artisan tinker
$ php artisan tinker
- Panggil fungsi factory() dengan memasukkan model dan jumlah row yang kita inginkan
>>> factory(\App\User::class, 10)->create()
Fungsi di atas akan membuat 10 row fake untuk tabel users. Ada pun untuk hanya membuat satu row saja, anda bisa memanggil helper factory()
tanpa memasukkan parameter jumlah row. Seperti berikut:
>>> factory(\App\User::class)->create()
Maka ia akan membuat satu baris saja. Mudah bukan? Sekarang kita coba mempraktikkan membuat dan mendefinisikan Model Factory baru.
Buat Project Baru
Anggap kita akan membuat project toko online yang menjual buku. Maka kita butuh tabel books
untuk menyimpan buku. Dan kita juga butuh untuk membuat data dummy-nya.
Buat projectnya dulu, dengan menulis perintah berikut:
laravel new toko-buku
Atau anda bisa baca artikel Cara install laravel di linux [Semua Distro] untuk membuatnya.
Copy file .env.example
menjadi .env
.
cp .env.example .env
Generate app secret key.
php artisan key:generate
Lalu hubungkan aplikasi kita dengan database yang sudah kita buat sebelumnya (kalau belum? ya bikin aja!).
Buat Tabel Buku dan Modelnya
Step selanjutnya adalah membuat table books
untuk menyimpan data buku. Dan juga membuat modelnya sekalian.
php artisan make:model Book -m
Perintah di atas akan membuat untuk kita dua file. Yaitu app/Book.php
sebagai model. Dan yang kedua adalah file database/migrations/XXXX_XX_XX_XXXXXX_create_books_table.php
sebagai migrations.
Buka file migration yang baru kita buat di atas, lalu isi sebagaimana berikut:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBooksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('title', 100);
$table->string('author', 60);
$table->string('publisher', 60);
$table->longtext('description');
$table->integer('price');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('books');
}
}
Pada terminal, jalankan perintah php artisan migrate
.
Dan tabel books
kita sudah berhasil terbuat.
Buat dan Definisikan Model Factory
Proses selanjutnya sebelum kita bisa men-generate data dummy pada tabel books
adalah dengan membuat dan mendefiniskan Model Factory. Untuk membuatnya cukup mudah, kita bisa men-generate filenya dengan menggunakan php artisan
.
php artisan make:factory BookFactory
Perintah di atas akan membuatkan file untuk kita di dalam folder database/factories
.
Setelah itu kita bisa definisikan setiap kolom dari tabel kita untuk kemudian kita generate. Buka file database/factories/BookFactory.php
lalu tambahkan kode berikut:
<?php
use Faker\Generator as Faker;
$factory->define(\App\Book::class, function (Faker $faker) {
return [
'title' => $faker->sentence(3),
'author' => $faker->name,
'publisher' => $faker->sentence(2),
'description' => $faker->text,
'price' => $faker->randomNumber(5)
];
});
Eksekusi Model Factory
Sekarang setelah semuanya siap, kita bisa mengeksekusi model factory yang sudah kita buat di atas. Kita bisa mengeksekusinya secara sederhana melalui php artisan tinker
seperti yang sudah dicontohkan sebelumnya, atau kita bisa juga mendefiniskan database seeder
sendiri.
Pada kasus ini, saya akan mencobanya dengan php artisan tinker
saja agar lebih cepat.
php artisan tinker
Panggil helper factory()
.
>>> factory(\App\Book::class)->create()
Itu akan men-generate satu buah baris di tabel books
.
Kita coba men-generate lebih dari satu baris sebagaimana yang telah berlalu.
>>> factory(\App\Book::class, 100)->create()
Bagaimana? Mudah dan asik bukan? Sekian dulu tutorial kali ini. Kalau ada yang kurang jelas atau error bisa tulis di komentar. Sampai jumpa~