Order (Đơn Hàng)
Class: \Ecommerce\Models\Order
Alias: Order (đã đăng ký toàn cục)
Table: order
Namespace: Ecommerce\Models
Cấu trúc Cột (Columns)
Bảng order (cột chính)
| Tên Cột | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
code | string | — | Mã đơn hàng (tự sinh, VD: 1012) |
total | int | 0 | Tổng tiền thực tế thanh toán (VND) |
status | string | wait | Trạng thái đơn hàng (xem OrderStatus) |
status_pay | string | unpaid | Trạng thái thanh toán (xem OrderPay) |
Metadata (bảng order_metadata / order_history)
Các trường mở rộng được tải tự động khi truy vấn Order thông qua Order::data():
| Tên Field | Mô tả |
|---|---|
name | Họ tên khách hàng |
phone | Số điện thoại |
email | |
address | Địa chỉ giao hàng |
city | Tỉnh/Thành phố (code) |
ward | Phường/Xã (code) |
note | Ghi chú đơn hàng |
payment_type | Key cổng thanh toán đã chọn (VD: vnpay, cod) |
shipping_type | Key đơn vị vận chuyển đã chọn |
shipping | Phí vận chuyển (int) |
shipping_name | Tên đơn vị vận chuyển |
discounts | Mảng các khoản giảm giá được áp dụng |
currency | Đối tượng tiền tệ tại thời điểm đặt hàng |
user_id | ID khách hàng (nếu đã đăng nhập) |
security_code | Mã bảo mật để xác thực callback |
Lưu ý: Các trường metadata được gắn tự động vào object Order thông qua event
retrieved→Order::data().
Truy Vấn Cơ Bản
// Lấy đơn hàng theo ID (kèm theo metadata và items)
$order = Order::find(100);
echo $order->name; // Họ tên khách (từ metadata)
echo $order->total; // Tổng tiền
echo $order->status; // 'wait', 'confirm', 'completed'...
echo $order->status_pay; // 'unpaid', 'paid', 'refunded'
// Items của đơn hàng (tự động load)
foreach ($order->items as $item) {
echo $item->title; // Tên sản phẩm
echo $item->quantity; // Số lượng
echo $item->price; // Đơn giá
echo $item->subtotal; // Thành tiền
}
// Tìm theo mã đơn hàng
$order = Order::where('code', '1025')->first();
// Đơn hàng đang chờ xác nhận
$orders = Order::where('status', 'wait')->get();
// Đơn hàng của khách hàng cụ thể (qua metadata user_id)
// Cần join với order_metadata
$orders = Order::whereHasMeta('user_id', $userId)->get();
Model OrderItem
Class: \Ecommerce\Models\OrderItem
Alias: OrderItem
Table: order_detail
// Lấy tất cả items của đơn hàng
$items = OrderItem::where('order_id', $orderId)->get();
foreach ($items as $item) {
echo $item->title; // Tên sản phẩm
echo $item->product_id; // ID sản phẩm
echo $item->price; // Đơn giá
echo $item->quantity; // Số lượng
echo $item->subtotal; // = price * quantity
// $item->option – mảng biến thể (color, size, variation_id...)
// $item->image – ảnh sản phẩm tại thời điểm đặt
}
Hook pre_insert_order_item_data
Được gọi trước khi insert OrderItem, dùng để chỉnh sửa dữ liệu:
add_filter('pre_insert_order_item_data', function($data) {
// Lưu thêm thông tin vào option
$data['option']['barcode'] = '...';
return $data;
});