Bài 04 – Config database và tạo các Model tương ứng với các table

Sharing is caring!

Hello! Ở bài trước chúng ta đã phân tích và thiết kế databse cho Quiz. Hôm nay có thời gian rãnh, tui sẽ đi vào phần tạo các file model cho table. Ở phần này tui sẽ tạo thêm một table mới tên là vl_user dùng để đăng nhập vào phần Backend để chuẩn bị cho bài kế tiếp là tạo trang login cho Backend.

1. Cấu hình kết nối database:

Trước khi tạo table mới và viết trang login. Tui sẽ làm một việc đó là cấu hình cho laravel 5 nó kết nối được với cái database. Ở đây, các thông số về database của tui như sau:

Các bạn sẽ điền những thông số này trong file SERVER_ROOT/learning/quiz/protected/app/.env, các bạn mở file này lên và tìm đến các dòng được highlight sau:

env database config

Các bạn sửa lại giá trị tương ứng và thêm một biến DB_TABLE_PREFIX như sau:

Sau khi thêm và edit xong. Tiếp theo, các bạn mở file database.php trong thư mục SERVER_ROOT/learning/quiz/protected/config, tìm đến đoạn code sau:

và sửa lại dòng prefix như sau:

Cững đơn giản ha Happy-Grin , chúng ta sẽ test phần cấu hình database này sau khi tạo file model.

2. Tạo table vl_user:

Để cho đơn giản, tui sẽ tạo table vl_user có các fields như sau:

user database

Các bạn chạy đoạn script sau để tạo table vl_user:

3. Tạo Model User:

Kế tiếp, chúng ta sẽ tạo một class User để làm model mapping với table vl_user. Do một số model sẽ được dùng chung cho cả backend và frontend, cho nên tui sẽ không tạo model cho riêng từng module này mà sẽ tạo bên ngoài thư mục SERVER_ROOT/learning/quiz/protected/app/Modules.

Đứng tại thư mục SERVER_ROOT/learning/quiz/protected/app, các bạn tạo thư mục mới tên là Models:

models folder

Sau khi có thư mục Models rồi, tui sẽ tạo file model tên là User.php. Ở đây các bạn có thể dùng artisan command của laravel để tạo file User.php và lưu vào thư mục Models này. Các bạn làm như sau:

Giả sử là các bạn đang đứng ở thư mục SERVER_ROOT/learning/quiz/protected/app. Các bạn chuyển ra thư mục SERVER_ROOT/learning/quiz/protected để có thể dùng lệnh của artisan.

create user model

Sau đó, các bạn có thể vào thư mục Models thì sẽ thấy file User.php được tạo ra

file user model

Tiếp nha, chúng ta xem coi file User.php này có gì, các bạn mở nó lên

Các bạn thấy:

Laravel nó sẽ tự thêm cái namespace là App\Models tương ứng với tham số khi chúng ta dùng lệnh artisan command:

Các bạn nhớ là “CAI_GI_DO/CLASS_NAME” ==> namespace App\CAI_GI_DO CAI_GI_DO chính là thư mục chứa các class model.

Do class User cần kế thừa từ class Model của Laravel nên ta phải use cái class này nha các bạn.

Đó là class User mà Laravel tạo cho chúng ta, nhưng vẫn chưa đủ, các bạn thêm các dòng sau vào trong class User nha.

Tui sẽ giải thích các dòng đã thêm vào như sau:

Mặc định, nếu ta không thêm dòng này thì Laravel sẽ hiểu là models User này sẽ mapping với table có tên là users, Laravel nó sẽ mặc định lấy tên class thêm (s) sẽ là tên table (ở đây không tính cái prefix vl_ nha các bạn). Do table này tui để tên là user nên tui thêm dòng trên vào để báo cho Laravel biết là tên table hiện tại là user chứ không phải là users.

 

Mặc định, $timestamps = true, nếu table của các bạn có 2 field: created_atupdated_at. Nếu table của bạn không có 2 field này thì các bạn gán $timestamps = false.

 

Với các field mà chúng ta muốn kiểm soát khi thay đổi giá trị (ví dụ như các giá trị này được post từ form html về chẳng hạn), thì ta cứ bỏ vào biến array $fillable để báo cho Laravel biết là cá field này có thể thay đổi giá trị bởi người dùng.

 

Ngược lại với $fillable là biến array $guarded, biến này sẽ chứa các field mà người dùng không được phép thay đổi. Ở đây các bạn thấy giá trị của  field ‘id’ sẽ tự động tăng khi insert một record mới (MySQL tự động làm việc này).

 

Trong một số trường hợp, khi chúng ta lấy tất cả các field của các record, và trong đó, chúng ta không muốn hiển thị một số record nào đó, ví dụ ở đây tui muốn là không hiển thị 2 field là passwordremember_token, khi đó tui sẽ đặt 2 field này vào trong biến array $hidden. Điều này có nghĩa là tui báo với Laravel rằng tui sẽ lấy hết các field trừ 2 field passwordremember_token.

Trên đây là một số các property của class Model mà ta thường sử dụng. Sau này, khi sử dụng tiếp các property hay các hàm nào nữa trong class Model thì tui sẽ giải thích thêm cho các bạn.

Có một tip nhỏ là, các bạn cứ tạo một file model cho chuẩn thôi, sau này khi tạo thêm file model nào thì chỉ việc copy file chuẩn này và sửa lại tên class, tên table, tên các fields tương ứng với table dưới database là được.

4. Kiểm tra cấu hình database đã đúng hay không?

Từ nảy giờ chúng ta toàn là tạo file, cấu hình database, tạo file model nhưng vẫn chưa biết là database kết nối có được hay không. Để test xem những gì nảy giờ chúng ta làm có hoạt động ổn không, các bạn tạo một hàm xử lý request trong module Backend, trong hàm này chúng ta sẽ sử dụng class model User để insert thử một record sau đó select các record trong table vl_user.

Đầu tiên, các bạn mở file routes.php trong thư mục SERVER_ROOT/learning/quiz/protected/app/Modules/Backend và thêm đoạn code sau:

Để sử dụng được model User, các bạn phải import nó vào bằng lệnh:

sau đó, các bạn tạo một object là $user, gán giá trị cho từng field và dùng hàm save() để lưu xuống database.

Sau khi save, select hết tất cả record trong table vl_user bằng hàm User::all(). Hàm toArray() của đối tượng $list dùng để chuyển tất cả record thành array, và dùng hàm dd() để print kết quả ra màn hình.

Tiếp, các bạn gõ cái url sau: http://localhost:8080/learning/quiz/admin/test-user, nêu kết quả hiện thị như sau thì các bạn đã config database và tạo model User đúng.  Congratulations

Nếu các bạn muốn hiển thị thêm field password thì vào file model User, bỏ cái field password ra khỏi biến $hidden, chỉ để lại field remember_token thôi

Các bạn cũng comment các dòng tạo user trong file routes.php để khi ta refresh lại thì nó không tạo thêm record User nữa.

Rồi refresh url trên, bạn sẽ thấy field password hiện ra:

Tương tự cho các table còn lại, các bạn chỉ việc copy từ file User.php tui đã làm ở trên, rồi sửa lại tên class, tên table, các field tương ứng là được. Không khó đâu nhé, hẹn gặp các bạn ở bài tiếp theo.  Bye

Sharing is caring!

Bài 03 - Phân tích và thiết kế database sử dụng MySQL 5
Bài 05 - Backend: Xây dựng trang login

Vincent Le

Tui là Lê Minh Đạt, tên tiếng anh là Vincent(do thích nhân vật Vincent Valentine, ai từng là fan của trò Final Fantasy VII thì sẽ biết nhân vật này, hehe). Đang tập tành làm một blogger viết về mảng lập trình, mong muốn được chia sẻ những gì đã học được, tích góp được trong 10 năm đi làm thợ code.

shares