Melanjutkan sesi belajar laravel, pada artikel sebelumnya kita telah berkenalan dengan Model yang terdapat pada laravel dengan seri Bermain dengan model laravel 5.4. Tak henti-hentinya kita akan dibuat terkesima oleh laravel, pada kesempatan kali ini kita akan mengagumi model yang terdapat di laravel pada sisi yang lain, yakni Model Factory.
Ada dua cara yang akan telusuri dalam menggunakan Model Factory yang bertujuan untuk membuat sample data atau test records yang dapat digunakan berkali kali sehingga kita tidak dibuat lelah untuk menginput data dalam proses testing secara berulang-ulang. Dan tentunya karena ini adalah artikel lanjutan dari serial Bermain dengan model laravel 5.4 , maka akan kita terapkan pada model Post.
Model Factory
Langkah pertama, silahkan buka database/factories/ModelFactory.php. Yang dapat anda temukan disini :
Seperti yang anda lihat, secara default terdapat method factory untuk membuat seed ke users table :
$factory->define(App\User::class, function (Faker\Generator $faker) {
static $password;
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => str_random(10),
];
});
Maka tambahkan method factory yang baru seperti berikut :
$factory->define(App\Post::class, function ($faker) {
return [
'title' => $faker->unique()->word,
];
});
Untuk mengisi kolom title ke posts table, kita akan menggunakan faker word, dan pastikan sifatnya unique, karena kita membuat rule pada kolom db tersebut.
Anda dapat mengecek https://github.com/fzaninotto/Faker untuk melihat format dan fitur yang faker yang dapat kita gunakan.
Kemudian didalam database/seeds, anda akan menemukan DatabaseSeeder.php, dimana kita akan menambahkan statement berikut :
use App\Post;
Dan juga ubah method run menjadi :
public function run()
{
Post::unguard();
Post::truncate();
factory(Post::class)->create();
Post::reguard();
}
Dapat anda lihat, kita menggunakan truncate pada records yang telah ada, kemudian memanggil factory method, dimana akan membuat single record. Jika kita ingin menambahkan records lebih banyak lagi, kita dapat menambahkan parameter kedua seperti berikut :
factory(Post::class, 40)->create();
Pada kasus ini, kita akan mendapatkan 40 records. Jalan command berikut untuk membuat records tersebut :
php artisan db:seed
Mudah bukan ? Membuat sample data sebanyak yang kita inginkan dalam sekali command tanpa perlu untuk menginputnya secara manual satu persatu.
Well, tidak cukup sampai disini karena sebagaimana yang kita singgun diawal bahwa kita akan berkenalan dengan 2 cara, maka cara selanjutnya adalah dengan menggunakan tinker.
Faker with tinker
Untuk memasukan mode tinker, maka jalankan command berikut :
php artisan tinker
dan anda akan di bawa ke mode tinker prompt, dimana akan terlihat seperti ini :
well, langkah pertama yang kita inginkan adalah melakukan truncate pada posts table, dan kita dapat melakukannya menggunakan command :
\App\Post::truncate();
akan mendapatkan response seperti ini :
Dengan menggunakan truncate akan menghapus semau records sebelumnya, jika anda mengecek posts table pada database, seharusnya anda akan menemukannya dalam keadaan kosong.
Sekarang, kita akan membuat sample data lagi akan tetapi dengan menggunakan tinker secara langsung dengan menggunakan command :
factory('App\Post', 40)->create();
Dan kita akan mendapatkan response berupa list data yang telah dibuat:
Jika anda mengecek db anda kembali, maka anda akan menemukan sample data pada table posts. Untuk menutup tinker, anda dapat mengetikkan exit kemudian [enter]. Atau bisa dengan menekan Control D (Control C untuk windows) kemudian tekan [enter].
Jadi ketika anda telah memiliki faker records didalam table anda, kemudian anda mencoba menjalankan factory method untuk melakukan seed kedua kalinya, anda mungkin akan mendapatkan error karena permasalah unique data. Hal itu disebabkan karena faker tidak mengetahui data apa yang telah tersebut di dalam database anda. Jadi jika anda ingin menjalankannya kembali, truncate table terlebih dahulu, kemudian anda dapat menjalankannya lagi.
Mana yang lebih mudah ? Menggunakan seed atau tinker ? Itu kembali pada anda, mana yang lebih jelita di mata anda. Selamat jatuh cinta.
Comments