A. NỘI DUNG
1. MÔ TẢ ĐỀ TÀI
MỤC TIÊU: Xây dựng một website bán hàng về chocolate và sưu tầm những loại Chocolate mà chúng ta vẫn chưa từng được thấy và nhằm cung cấp những thông tin về món ăn tráng miệng hoặc để tặng quà cho người thân hoặc người mình thương
2. CÔNG NGHỆ SỬ DỤNG
- Laravel: Framework PHP mạnh mẽ và linh hoạt, giúp xây dựng các ứng dụng web nhanh chóng với cấu trúc MVC (Model-View-Controller) rõ ràng.
- MySQL: Hệ quản trị cơ sở dữ liệu quan hệ phổ biến, dễ sử dụng và có hiệu suất cao.
- HTML/CSS/JavaScript: Các công nghệ front-end để xây dựng giao diện người dùng.
- Blade: Template engine của Laravel để tạo giao diện người dùng động.
3. CHỨC NĂNG CHÍNH
QUẢN LÝ SẢN PHẨM
- Thêm, sửa, xóa sản phẩm (dành cho admin).
QUẢN LÝ ĐƠN HÀNG
- Quản lý trạng thái đơn hàng (admin).
4. THIẾT KẾ CƠ SỞ DỮ LIỆU
- Bảng users: Lưu thông tin người dùng (id, name, email, password, role, created_at, updated_at).
- Bảng products: Lưu thông tin sản phẩm (id, name, description, price, category_id, created_at, updated_at).
- Bảng categories: Lưu thông tin danh mục sản phẩm (id, name, created_at, updated_at).
- Bảng orders: Lưu thông tin đơn hàng (id, user_id, code, status, created_at, updated_at).
- Bảng order_items: Lưu thông tin chi tiết đơn hàng (id, order_id, product_id, quantity, price, created_at, updated_at).
5. MÔ HÌNH DỮ LIỆU WORKBENCH
![](https://amzuni.com/wp-content/uploads/2024/05/a.jpg)
6. MODEL
- Category
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
public function products(){
return $this->hasMany(Product::class);
}
}
- Product
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasFactory; public function category(){ return $this->belongsTo(Category::class); } public function orderItems(){ return $this->hasMany(OrderItem::class); } }
- User
<?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var array<int, string> */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function orders(){ return $this->hasMany(Order::class); } }
- Order
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Order extends Model { use HasFactory; public function orderItems(){ return $this->hasMany(OrderItem::class); } public function user(){ return $this->belongsTo(User::class); } }
- OrderItem
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class OrderItem extends Model { use HasFactory; public function product(){ return $this->belongsTo(Product::class); } public function order(){ return $this->belongsTo(Order::class); } }
7. CONTROLLER
7.1. ADMIN
- User
<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return User::all(); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return User::create($request->only('name' , 'email', 'password')); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return User::findOrFail($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { User::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { User::findOrFail($id)->destroy(); } }
7.2. TRANG GIAO DIỆN
- User
<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return User::all(); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return User::create($request->only('name' , 'email', 'password')); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return User::findOrFail($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { User::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { User::findOrFail($id)->destroy(); } }
- product
<?php namespace App\Http\Controllers; use App\Models\Product; use Illuminate\Http\Request; class ProductController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $productList = Product::all(); return view('products.index', ['productList' => $productList]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return Product::create($request->all()); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $product = Product::findOrFail($id); return view('products.show' , ['product' => $product]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { Product::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { Product::findOrFail($id)->destroy(); } }
- Category
<?php namespace App\Http\Controllers; use App\Models\Category; use Illuminate\Http\Request; class CategoryController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return Category::all(); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return Category::create($request->all()); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return Category::findOrFail($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { Category::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { Category::findOrFail($id)->destroy(); } }
- Order
<?php namespace App\Http\Controllers; use App\Models\Order; use Illuminate\Http\Request; class OrderController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return Order::all(); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return Order::create($request->all()); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return Order::findOrFail($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { Order::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { Order::findOrFail($id)->destroy(); } }
- OrderItem
<?php namespace App\Http\Controllers; use App\Models\OrderItem; use Illuminate\Http\Request; class OrderItemController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return OrderItem::all(); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { return OrderItem::create($request->all()); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return OrderItem::findOrFail($id); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { OrderItem::findOrFail($id)->update($request); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { OrderItem::findOrFail($id)->destroy(); } }
B. SOURCE CODE
Github: https://github.com/QThinh1/JPW.git
C. THÀNH VIÊN
- Lê Hà Quốc Thịnh
- Nguyễn Minh Sang
- Bùi Việt Nga