Tiếp tục nội dung của bài trước, sau khi thiết kế xong tính năng của hệ thống thì trong bài này, mình sẽ hướng dẫn các bạn cách cài đặt Laravel, starter kit để xác thực user, tạo model và migration để tạo bảng trong database cho hệ thống.
Cài đặt Laravel và Breeze (requirement tham khảo thêm ở trang chủ Laravel)
Đầu tiên mình sẽ cài đặt Laravel 12 bằng composer bằng lệnh (có thể tham khảo các cách cài khác ở trang chủ Laravel)
composer create-project laravel/laravel demo-phong-hop
Tiếp theo mình sẽ cài Breeze để có sẵn phần xác thực user (Laravel 12 không có sẵn Breeze ở phần document, nhưng mình sẽ cài thông qua composer với hướng dẫn tương tự ở bản Laravel 11). Chúng ta lần lượt chạy các lệnh sau ở terminal
composer require laravel/breeze --dev
php artisan breeze:install
Ở bước này, mình sẽ chọn blade (vì mình quen sử dụng hơn), không dùng darkmode và PHPUnit để test. Sau đó tiếp tục chạy các lệnh sau để cài đặt
php artisan migrate
npm install
npm run dev
Sau khi hoàn tất thì chúng ta có thể chạy php artisan serve và truy cập 127.0.0.1:8000 để xem giao diện của trang lúc này đã có sẵn phần đăng nhập/đăng ký từ breeze. Để tham khảo thêm các route này viết như thế nào, chúng ta có thể xem ở routes/auth.php để biết thêm – mình sẽ không giới thiệu quá sâu về những phần này.
Tạo model và migration cho hệ thống
Đầu tiên mình sẽ dùng lệnh make:model có thêm tùy chọn -m để tạo các model cần cho hệ thống và các file migration theo model (dùng để tạo bảng trong cơ sở dữ liệu)
php artisan make:model NhanVien -m
php artisan make:model PhongHop -m
php artisan make:model LichHop -m
php artisan make:model NguoiThamGiaHop -m
Tiếp đó, mình sẽ cấu hình cho các file migration tương ứng, đầu tiên là migration cho bảng nhân viên.

- Vì mình muốn tách bảng user và nhân viên ra riêng nên mới tạo bảng này, bạn hoàn toàn có thể gom 2 bảng NhanVien và User lại thành 1 bảng cho hệ thống này.
- Khi xóa user thì mình vẫn muốn giữ lại thông tin người họp trước đó, nên mình chỉ gắn null cho id_user thay vì cho xóa luôn
Tiếp theo là cấu hình cho bảng Phòng Họp, Lịch Họp và Người Tham Gia Họp tương tự như kiểu dữ liệu đã phân tích ở bài trước. Ở đây mình sẽ dùng unsigned integer cho cột id thay vì big int do mình thấy thực tế sẽ không cần nhiều id tới vậy và mình cũng không cần id là số âm (nên dùng unsigned)



- Ở Phòng Họp và Người Tham Gia Họp, mình sẽ không dùng 2 cột created_at và updated_at nên đã ẩn trường timestamps đi
- Trong các file migration này mình cũng quy định khóa ngoại (foreign key) để khi cập nhật id hoặc xóa id của các bảng chính thì bảng con cũng sẽ tự thay đổi theo.
Sau khi đã xong tất cả các file migration, mình chạy lệnh migrate để tạo bảng tương ứng cho các model
php artisan migrate
*Để chắc rằng mình đã làm đúng cho phần rollback (hàm down trong file migration), mình sẽ chạy thêm lệnh rollback và migrate 1 lần nữa để kiểm tra xem có roll back rồi tạo lại bảng bằng file migration được hay chưa. Nếu không có lỗi gì xảy ra thì mình đã làm đúng.
php artisan migrate:rollback
php artisan migrate
Cài đặt các hàm cơ bản cho model
Đầu tiên là model NhanVien và User.
- Ở NhanVien, mình sẽ thêm quan hệ (relation) dạng BelongsTo với User (1 NhanVien thuộc 1 User), và 2 quan hệ dạng HasMany với LichHop và NguoiThamGiaHop (1 NhanVien thì tạo nhiều LichHop và có thể tham gia nhiều cuộc họp lưu ở NguoiThamGiaHop)
- Ngược lại ở model User mình sẽ tạo quan hệ HasOne với NhanVien (1 User thì có 1 thông tin NhanVien)


Tiếp theo mình sẽ cấu hình cho model PhongHop. Ở model này mình không sử dụng 2 cột created_at và updated_at nên sẽ đặt $timestamps = false; để hệ thống không tự thêm 2 biến này khi thêm hoặc cập nhật model. Các quan hệ sẽ tương tự như của model NhanVien

Kế tiếp, mình viết các hàm cho model LichHop và NguoiThamGiaHop, 2 model này cũng có logic tương tự như các model trên nên mình sẽ đi nhanh.


Các model của mình có tên bảng không giống với tên model mà có thêm “demo___”, ở Laravel, nếu tên bảng khác tên model hoặc muốn quy định tên bảng cụ thể, ta có thể dùng public $table = ‘tên_tự_đặt’ để tùy chỉnh tên bảng
Mình đã viết xong các model và hàm cơ bản của chúng, trong bài sau, mình sẽ cũng các bạn xây dựng các Controller và View cho hệ thống phòng họp này. Nếu có vấn đề hay góp ý nào, bạn cứ để lại bình luận cho mình nhé!


Để lại một bình luận