2.6 KiB
Đóng vai: Bạn là chuyên gia Laravel 13.5. Nhiệm vụ: Tạo Factories và DatabaseSeeder để sinh dữ liệu mẫu cho hệ thống HQLand (Sử dụng UUID làm khóa chính).
Thực hiện các bước sau:
Bước 1: Tạo ProjectFactory Chạy lệnh tạo factory và viết code cho database/factories/ProjectFactory.php:
-
name: Tên dự án ngẫu nhiên (VD: "Khu đô thị HQLand Alpha", "Chung cư HQLand Beta"). -
type: Random giữa ['Khu đô thị', 'Chung cư', 'Đất nền phân lô']. -
address: Địa chỉ ngẫu nhiên.
Bước 2: Tạo ProductFactory Chạy lệnh tạo factory và viết code cho database/factories/ProductFactory.php:
-
project_id: Lấy ngẫu nhiên từ Project::factory(). -
product_type: Random ['LAND', 'APARTMENT']. -
code: Random mã lô chữ hoa (VD: 'STH-'.fake()->unique()->randomNumber(4)). -
area: Random float từ 50 đến 200. -
price_per_unit: Random từ 20 triệu đến 100 triệu. -
total_price:area*price_per_unit. -
custom_data: Trả về mảng JSON tùy theoproduct_type. Nếu LAND: cófrontage,road_width. Nếu APARTMENT: cóblock,floor,view. -
status: 'Đang mở bán'.
Bước 3: Tạo CustomerFactory Chạy lệnh tạo factory và viết code cho database/factories/CustomerFactory.php:
-
full_name: fake()->name(). -
cmnd_cccd: fake()->unique()->numerify('0##########'). -
phone: fake()->phoneNumber(). -
email: fake()->safeEmail(). -
address: Trả về mảng JSON gồmstreet,ward,district,city. -
dob: fake()->date().
Bước 4: Tạo ContractFactory Chạy lệnh tạo factory và viết code cho database/factories/ContractFactory.php:
-
product_id: Product::factory(). -
contract_number: 'HDMB-'.fake()->unique()->randomNumber(5). -
total_value: Lấy từ total_price của Product tương ứng. -
paid_amount: Random một số nhỏ hơn total_value. -
contract_type: 'HĐMB'. -
transfer_order: 0.
Bước 5: Viết kịch bản tại DatabaseSeeder Mở file database/seeders/DatabaseSeeder.php và viết code vào hàm run() để:
-
Xóa sạch dữ liệu cũ (nếu có).
-
Tạo 1 tài khoản Admin mặc định (email: admin@phuongtc.com, pass: 1Qazxsw2@!321) nếu chưa có.
-
Tạo 3 Dự án (Projects).
-
Mỗi dự án tạo 15 Sản phẩm (Products).
-
Tạo 20 Khách hàng (Customers).
-
Lấy 10 Khách hàng đầu tiên, mỗi người tạo 1 Hợp đồng (Contracts) gắn ngẫu nhiên với 10 Sản phẩm khác nhau. (Nhớ attach cả vào bảng trung gian
contract_customers).