feat(seeder): membuat seeder untuk parfum, produk dan botol dan mendaftarkannya ke DatabaseSeeder

This commit is contained in:
Yoga Pangestu 2025-10-04 18:36:19 +07:00
parent db35517288
commit 7224f722b9
4 changed files with 143 additions and 0 deletions

View File

@ -0,0 +1,42 @@
<?php
namespace Database\Seeders;
use App\Models\Bottle;
use App\Models\Outlet;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class BottleSeeder extends Seeder
{
public function run(): void
{
$bottles = [
['name' => 'Botol Kaca 30ml Elegant', 'size' => 30],
['name' => 'Botol Kaca 50ml Premium', 'size' => 50],
['name' => 'Botol Kaca 100ml Classic', 'size' => 100],
['name' => 'Botol Plastik 30ml Travel', 'size' => 30],
['name' => 'Botol Aluminium 100ml Refill', 'size' => 100],
['name' => 'Botol Roll On 6ml Mini', 'size' => 6],
['name' => 'Botol Spray 15ml Slim', 'size' => 15],
['name' => 'Botol Kaca 250ml Jumbo', 'size' => 250],
['name' => 'Botol Kristal 50ml Luxury', 'size' => 50],
['name' => 'Botol Refill 500ml Bulk', 'size' => 500],
];
foreach ($bottles as $index => $item) {
$slug = Str::slug($item['name']);
$bottle = Bottle::create([
'name' => $item['name'],
'slug' => $slug,
'size' => $item['size'],
'cost_price' => fake()->numberBetween(2000, 20000),
'sale_price' => fake()->numberBetween(10000, 50000),
'description' => fake()->sentence(10),
]);
$bottle->outlets()->attach(Outlet::all()->pluck('id')->toArray());
}
}
}

View File

@ -17,6 +17,9 @@ public function run(): void
CategorySeeder::class,
BrandSeeder::class,
CustomerSeeder::class,
PerfumeSeeder::class,
ProductSeeder::class,
BottleSeeder::class,
]);
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace Database\Seeders;
use App\Enums\Concentration;
use App\Models\Brand;
use App\Models\Category;
use App\Models\Outlet;
use App\Models\Perfume;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class PerfumeSeeder extends Seeder
{
public function run(): void
{
$perfumeNames = [
'Amber Woods',
'Velvet Oud',
'Citrus Bloom',
'Midnight Musk',
'Ocean Whisper',
'Rose Eclipse',
'Golden Sand',
'Spiced Leather',
'Vanilla Sky',
'Emerald Breeze',
];
$brands = Brand::orderBy('sort_order')->get();
foreach ($perfumeNames as $index => $name) {
$brand = $brands[$index % $brands->count()];
$slug = Str::slug($name);
$sku = Str::upper(Str::random(3)).'-'.str_pad($index + 1, 4, '0', STR_PAD_LEFT);
$perfume = Perfume::create([
'brand_id' => $brand->id,
'name' => $name,
'slug' => $slug,
'sku' => $sku,
'concentration' => fake()->randomElement(Concentration::values()),
'cost_price' => fake()->numberBetween(500, 1100),
'sale_price' => fake()->numberBetween(2500, 5000),
'base_notes' => fake()->optional()->randomElement(['Amber', 'Musk', 'Vanilla', 'Sandalwood', 'Leather']),
'middle_notes' => fake()->optional()->randomElement(['Rose', 'Jasmine', 'Patchouli', 'Cedarwood', 'Iris']),
'top_notes' => fake()->optional()->randomElement(['Citrus', 'Bergamot', 'Pepper', 'Mint', 'Lavender']),
'description' => fake()->optional()->sentence(10),
]);
$perfume->categories()->attach(fake()->randomElements(Category::all()->pluck('id')->toArray(), 2));
$perfume->outlets()->attach(Outlet::all()->pluck('id')->toArray());
}
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace Database\Seeders;
use App\Models\Outlet;
use App\Models\Product;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class ProductSeeder extends Seeder
{
public function run(): void
{
$products = [
'Kurma Ajwa',
'Kurma Medjool',
'Siwak Al Miswak',
'Minyak Wangi Kasturi',
'Tasbih Kayu Cendana',
'Sorban Putih Premium',
'Kitab Riyadhus Shalihin',
'Kitab Arbain Nawawi',
'Kapsul Habbatussauda',
'Air Zamzam 1L',
];
foreach ($products as $index => $name) {
$slug = Str::slug($name);
$sku = Str::upper(Str::random(3)).'-'.str_pad($index + 1, 4, '0', STR_PAD_LEFT);
$product = Product::create([
'name' => $name,
'slug' => $slug,
'sku' => $sku,
'cost_price' => fake()->numberBetween(15000, 80000),
'sale_price' => fake()->numberBetween(50000, 200000),
'description' => fake()->sentence(12),
]);
$product->outlets()->attach(Outlet::all()->pluck('id')->toArray());
}
}
}