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
Order
có nhiềuItem
- Một
Warehouse
có 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 quasku
thay 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
Warehouse
trước - Sau đó tìm
Product
theobarcode
trong 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