Files
nnterp-react-admin/database/seeders/DemoOrderSeeder.php
2026-03-13 20:49:46 +08:00

60 lines
2.2 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Order;
use App\Models\Plan;
use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
class DemoOrderSeeder extends Seeder
{
public function run($userId): void
{
if (Order::where('created_by', $userId)->exists()) {
return;
}
$faker = Faker::create();
$plans = Plan::limit(5)->get();
$currentYear = now()->year;
// Create orders for each month with varying quantities
for ($month = 1; $month <= 12; $month++) {
$ordersCount = $faker->numberBetween(5, 15); // Random orders per month
for ($i = 0; $i < $ordersCount; $i++) {
$plan = $faker->randomElement($plans);
$price = $faker->randomFloat(2, 29, 299);
// Random date within the month
$createdAt = $faker->dateTimeBetween(
"$currentYear-$month-01",
"$currentYear-$month-" . date('t', mktime(0, 0, 0, $month, 1, $currentYear))
);
Order::create([
'order_id' => strtoupper(substr(uniqid(), -12)),
'name' => $faker->name,
'email' => $faker->safeEmail,
'card_number' => '**** **** **** ' . $faker->numerify('####'),
'card_exp_month' => $faker->numberBetween(1, 12),
'card_exp_year' => $faker->numberBetween(2024, 2030),
'plan_name' => $plan->name,
'plan_id' => $plan->id,
'price' => $price,
'discount_amount' => $faker->randomFloat(2, 0, $price * 0.3),
'currency' => $faker->randomElement(['USD', 'EUR', 'GBP']),
'txn_id' => $faker->uuid,
'payment_status' => $faker->randomElement(['succeeded']),
'payment_type' => $faker->randomElement(['Stripe', 'Paypal', 'Bank Transfer']),
'receipt' => $faker->optional()->url,
'created_by' => $userId,
'created_at' => $createdAt,
'updated_at' => $createdAt,
]);
}
}
}
}