Laravel Scoped Route Binding cho Nested Resource
Scoped Route Binding trong Laravel giúp xử lý resource lồng nhau (nested resources) một cách tự động và an toàn, đặc biệt là đảm bảo mối quan hệ cha-con giữa các model như Order - Item, Warehouse - Product.
❓ Vấn đề
Giả sử bạn có quan hệ như sau:
- Một 
Ordercó nhiềuItem - Một 
Warehousecó nhiềuProduct 
Và bạn có route như: /orders/123/items/ABC789
Bạn muốn Laravel tự xác nhận rằng Item ABC789 phải thực sự thuộc về Order 123.
✅ Giải pháp: scoped() trong route binding
Laravel hỗ trợ scoped() để binding model con trong phạm vi model cha.
Ví dụ:
Route::resource('orders.items', OrderItemController::class)->scoped([
    'item' => 'sku',
]);
Laravel hiểu rằng:
{order}là modelOrder{item:sku}là modelItem, được tìm quaskuthay vìid- Laravel sẽ tìm item thông qua quan hệ 
items()trong Order → đảm bảo đúng dữ liệu 
🔍 Cơ chế hoạt động
Laravel dựa vào:
- Tên route: 
orders.items→ Laravel mong chờOrder::items() - Route URL: 
/orders/{order}/items/{item:sku} - Laravel chạy logic như:
 
$order->items()->where('sku', 'ABC789')->firstOrFail();
→ thay vì truy xuất item toàn cục
🏗️ Ví dụ khác: Warehouse – Product
Route::resource('warehouses.products', WarehouseProductController::class)->scoped([
    'product' => 'barcode',
]);
Laravel hiểu:
- Tìm 
Warehousetrước - Sau đó tìm 
Producttheobarcodetrong quan hệ$warehouse->products() 
Models:
class Warehouse extends Model {
    public function products() {
        return $this->hasMany(Product::class);
    }
}
class Product extends Model {
    public function warehouse() {
        return $this->belongsTo(Warehouse::class);
    }
}
✅ Ưu điểm
| Ưu điểm | Mô tả | 
|---|---|
| ✔ Tự động kiểm tra mối quan hệ | Tránh sai lệch dữ liệu | 
| ✔ Trả về 404 nếu không hợp lệ | Không cần xử lý tay trong controller | 
| ✔ RESTful & sạch sẽ | Route rõ ràng, logic gọn gàng | 
🧠 Tổng kết
| Tính năng | Mô tả | 
|---|---|
scoped() | 
Ràng buộc model con trong phạm vi model cha | 
{param:column} | 
Tìm theo cột khác ngoài id | 
| Laravel xử lý | Tự động validate, trả 404 nếu sai quan hệ | 
| Code sạch | Không cần viết thêm logic kiểm tra | 
👉 Kết luận
Scoped Route Binding cực kỳ hữu ích trong các hệ thống:
- E-commerce
 - Inventory
 - Nested admin panel
 
Giúp bảo vệ dữ liệu và giảm tải xử lý logic kiểm tra quan hệ trong controller.
Nguồn: https://laravel-news.com/route-resource-scoped
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashPanel - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashPanel là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
 - * Không có kinh nghiệm quản lý máy chủ
 - * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
 - * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
 - * Muốn tự động hóa mọi thao tác
 - * Muốn tiết kiệm thời gian quản trị máy chủ
 - * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashpanel.io
 
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍Đánh giá bài viết

              
                  
                  
                  
                  
                  
                  
                  
Bình luận