71 lines
2.9 KiB
PHP
71 lines
2.9 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace Database\Factories;
|
|||
|
|
|
|||
|
|
use App\Models\Category;
|
|||
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @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
|
|||
|
|
{
|
|||
|
|
// 定義豐富的中文測試資料庫
|
|||
|
|
$productNames = [
|
|||
|
|
'高山烏龍茶', '茉莉綠茶', '特級紅茶', '四季春茶', '阿薩姆紅茶', '錫蘭紅茶', '普洱茶',
|
|||
|
|
'珍珠粉圓', '波霸粉圓', '椰果', '仙草凍', '愛玉凍', '布丁', '紅豆', '綠豆',
|
|||
|
|
'果糖', '黑糖漿', '蜂蜜', '蔗糖液', '煉乳',
|
|||
|
|
'奶精粉', '鮮奶油', '全脂鮮乳', '低脂鮮乳', '燕麥奶',
|
|||
|
|
'檸檬原汁', '百香果漿', '芒果果泥', '草莓果醬', '柳橙濃縮汁',
|
|||
|
|
'塑膠杯 (700cc)', '紙杯 (500cc)', '封口膜', '粗吸管', '細吸管', '杯蓋',
|
|||
|
|
'外帶提袋 (單杯)', '外帶提袋 (雙杯)', '吸管套', '杯架'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$brands = [
|
|||
|
|
'統一', '光泉', '味全', '雀巢', '立頓', '天仁', '台糖', '義美', '開元', '瑞穗', '六甲田莊', '南亞塑膠'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$specs = [
|
|||
|
|
'業務用 5kg裝', '100入/袋', '業務號 3L', '特級品', 'A級', '家庭號 2L', '10kg/箱', '500g/罐'
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$units = ['包', '罐', '瓶', '箱', '袋', '個', '支', '公斤', '公升'];
|
|||
|
|
$baseUnit = $this->faker->randomElement($units);
|
|||
|
|
|
|||
|
|
$largeUnits = ['箱', '袋', '桶', '磨', '組'];
|
|||
|
|
$largeUnit = $this->faker->randomElement($largeUnits);
|
|||
|
|
|
|||
|
|
$purchaseUnits = ['箱', '棧板', '車'];
|
|||
|
|
$purchaseUnit = $this->faker->randomElement($purchaseUnits);
|
|||
|
|
|
|||
|
|
// 隨機取得一個 Category,若沒有則略過
|
|||
|
|
$category = Category::inRandomOrder()->first();
|
|||
|
|
|
|||
|
|
// 為了讓名稱不重複,可以加個隨機形容詞或編號,或者直接用 faker 但指定語系 (若 env 不能改)
|
|||
|
|
// 這裡我們混搭:隨機選一個品名 + 隨機品牌 + 隨機規格,組成較真實的商品描述概念
|
|||
|
|
|
|||
|
|
$name = $this->faker->randomElement($productNames);
|
|||
|
|
$brand = $this->faker->randomElement($brands);
|
|||
|
|
$spec = $this->faker->randomElement($specs);
|
|||
|
|
|
|||
|
|
return [
|
|||
|
|
'code' => strtoupper($this->faker->unique()->bothify('??###')),
|
|||
|
|
'name' => $name . ' (' . $brand . ')', // 例如:高山烏龍茶 (天仁)
|
|||
|
|
'category_id' => $category ? $category->id : null,
|
|||
|
|
'brand' => $brand,
|
|||
|
|
'specification' => $spec,
|
|||
|
|
'base_unit' => $baseUnit,
|
|||
|
|
'large_unit' => $largeUnit,
|
|||
|
|
'conversion_rate' => $this->faker->numberBetween(10, 1000),
|
|||
|
|
'purchase_unit' => $purchaseUnit,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|