Hello, kali ini kita akan membahas tentang Tinker, Factory dan Seeder di Laravel 10. Ketiga fitur ini akan sangat membantu kita pada saat development aplikasi. Utamanya dalam pembuatan sampel data untuk testing. Namun sebelumnya, saya asumsikan bahwa Anda telah menginstall project laravel dari awal dan juga telah melakukan konfigurasi database. Jika belum, Anda dapat mengikuti Tutorial Instalasi Laravel 10 yang telah diposting sebelumnya.
Tinker
Tinker adalah shell interface atau console di Laravel yang dapat mengakomodasi kita berinteraksi dalam aplikasi Laravel yang meliputi interaksi dengan Eloquent model, job, event dan sebagainya. Untuk masuk ke Tinker environment ketikkan perintah berikut:
php artisan tinker
Tampilannya seperti berikut:
Factory
Ketika melakukan testing aplikasi, biasanya kita membutuhkan beberapa baris sampel data di tabel database. Menambahkan sampel data ke database secara manual satu per satu adalah hal yang membosankan. Dengan menggunakan model factory kita dapat mendefinisikan default attribute value pada setiap eloquent model yang kita punya. Apabila kita sudah mempunyai model (misal: Product), kita dapat membuat factory dengan perintah berikut:
php artisan make:factory ProductFactory
Kita juga dapat membuat Migration, Model, dan Factory dengan satu perintah seperti berikut:
php artisan make:model Product -mf
Maka akan tergenerate file migration, model, dan factory seperti berikut:
Ubah file migration menjadi seperti berikut:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('sku')->index();;
$table->string('name');
$table->decimal('price', 15, 2)->nullable();
$table->integer('stock')->default(0);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('products');
}
};
Ubah ProductFactory
(database/factories/ProductFactory) menjadi seperti berikut:
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Product>
*/
class ProductFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'sku' => Str::random(10),
'name' => fake()->name(),
'price' => fake()->randomNumber(4),
'stock' => fake()->randomNumber(2),
];
}
}
Pemanggilan method fake()
di atas adalah proses mengenerate fake data menggunakan library FakerPHP
Selanjutnya, jalankan migrasi database dengan perintah:
php artisan migrate
Model
Kita perlu mendefinisikan properti fillable
pada model Product
agar dapat menyimpan data ke tabel products
. Ubah model Product
menjadi seperti berikut:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillabe = [
'sku',
'name',
'price',
'stock',
];
}
Membuat Sampel Data via Tinker
Sebelumnya silahkan masuk ke Tinker console dengan perintah:
php artisan tinker
Kita dapat membuat sampel data via Tinker dengan menjalankan model factory ProductFactory
yang telah kita buat sebelumnya dengan perintah seperti berikut:
Product::factory()->create();
Hasilnya adalah:
Pada tampilan di atas terlihat 1 baris sampel data terbuat dan tersimpan ke dalam tabel products. Kita juga dapat membuat banyak sampel data dalam satu kali perintah seperti berikut:
Product::factory()->count(5)->create();
Seeder
Laravel memberikan kemudahan untuk membuat initial data ke dalam tabel database dengan adanya Seed Classs
yang tersimpan pada folder database/seeders
. Kita dapat membuat seeder dengan factory model Product
yang telah kita buat sebelum di atas dengan perintah berikut:
php artisan make:seeder ProductSeeder
maka akan tergenerate file database/seeders/ProductSeeder.php
. Buka kemudian lakukan perubahan menjadi seperti berikut:
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Product;
class ProductSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Product::factory()->count(5)->create();
}
}
Selanjutnya, kita perlu memanggil ProductSeeder
ini di dalam class DatabaseSeeder
(database/seeders/DatabaseSeeder.php):
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
ProductSeeder::class,
]);
}
}
Untuk menjalan seeder di Laravel lakukan dengan perintah berikut:
php artisan db:seed
Maka, seeder class yang telah kita buat di atas akan dieksekusi:
Dan kalau kita cek di tabel products
di database kita, maka akan terbuat beberapa sampel data seperti berikut:
Gimana, makin seru kan??? Selamat mencoba!
Tulis Komentar