Ngu ngơ học làm web (x2) - CakePHP2 - Tạo CSDL MVC

Tiếp theo của: Ngu ngơ học làm web (x1) - CakePHP2 – Cài đặt
-----

Phần x2. CakePHP2 – Tạo CSDL  MVC

Xem clip về phân tích, thiết kế cơ sở dữ liệu (clip số 4 – chickenrainshop):

Đây là đoạn mã để tạo các bảng của cơ sở dữ liệu, import vào cơ sở dữ liệu để làm các bước tiếp theo. Cách làm: nếu chưa tạo cơ sở dữ liệu cho dự án này, thì vào phpmyadmin, tạo cơ sở dữ liệu mới, đặt tên là chickenrainshop, chép (copy) toàn bộ đoạn mã dưới đây, mở một tập tin mới trong Sublime Text (hoặc một editor bất kì), dán (paste) vào đó, lưu lại với tên là database.sql, rồi import vào cơ sở dữ liệu chickenrainshop.

drop table if exists books;
drop table if exists books_writers;
drop table if exists categories;
drop table if exists comments;
drop table if exists coupons;
drop table if exists groups;
drop table if exists orders;
drop table if exists users;
drop table if exists writers;

/*--table books--*/
create table books
(
            id                                             int not null auto_increment,
            category_id                             int,
            title                                          varchar(100) not null,
            slug                                          varchar(255) not null,
            image                                      varchar(255),
            info                                          text not null,
            price                                        int not null,
            sale_price                                int not null,
            publisher                                 varchar(100) not null,
            publish_date                            date not null,
            link_download                         varchar(255) not null,
            published                                 bool default 0,
            created                                                datetime,
            modified                                  datetime,
            primary key (id)
);

/*--table books_writers--*/
create table books_writers
(
            book_id                                   int not null,
            writer_id                                  int not null,
            primary key (book_id, writer_id)
);

/*--table categories--*/
create table categories
(
            id                                             int not null auto_increment,
            name                                       varchar(100) not null,
            slug                                          varchar(255) not null,
            description                               text,
            created                                                datetime,
            primary key (id)
);

/*--table comments--*/
create table comments
(
            id                                             int not null auto_increment,
            user_id                                    int not null,
            book_id                                   int not null,
            content                                     text not null,
            created                                                datetime,
            primary key (id)
);

/*--table coupons--*/
create table coupons
(
            id                                             int not null auto_increment,
            code                                         varchar(255) not null,
            percent                                                float(3) not null,
            description                               text,
            time_start                                datetime not null,
            time_end                                  datetime not null,
            created                                                datetime,
            modified                                  datetime,
            primary key (id)
);

/*--table groups--*/
create table groups
(
            id                                             int not null auto_increment,
            name                                       varchar(100) not null,
            percent                                                float(3) not null,
            description                               text,
            created                                                datetime,
            primary key (id)
);

/*--table orders--*/
create table orders
(
            id                                             int not null auto_increment,
            user_id                                    int not null,
            customer_info                          text not null,
            orders_info                              text not null,
            payment_info                           text not null,
            status                                       int default 1,
            created                                                datetime,
            modified                                  datetime,
            primary key (id)
);

/*--table users--*/
create table users
(
            id                                             int not null auto_increment,
            group_id                                  int not null,
            username                                 varchar(100) not null,
            password                                 varchar(100) not null,
            email                                       varchar(100) not null,
            firstname                                 varchar(100) not null,
            lastname                                  varchar(100) not null,
            address                                    varchar(255),
            phone_number                                    char(13),
            created                                                datetime,
            modified                                  datetime,
            primary key (id)
);

/*--table writers--*/
create table writers
(
            id                                             int not null auto_increment,
            name                                       varchar(100) not null,
            slug                                          varchar(255) not null,
            biography                                text,
            created                                                datetime,
            primary key (id)
);

Sinh mã của dự án theo mô hình MVC.

Vì cơ sở dữ liệu đã được đặt tên theo quy ước của CakePHP, nên có thể sử dụng cake console để sinh mã tự động cho các chức năng cơ bản.

Mở cửa sổ dòng lệnh, chuyển tới thư mục của dự án, ví dụ: E:\webroot\chickenrainshop nhập lệnh sau: cake bake all

Màn hình sẽ hiển thị tên của các model mà hệ thống có thể sinh mã, ví dụ:

1. Book
2. BooksWriter
3. Category
4. Comments
5. Coupons
6. Groups
7. Orders
8. Users
9. Writers

Nhập từng số ở danh sách trên để sinh mã tự động. Lưu ý: xong mỗi model sẽ gõ lại cake bake all và nhập số kế tiếp, do books_writers là bảng phụ nên sẽ không cần sinh mã cho bảng này.

Sau khi chạy xong các lệnh cake bake all, Cake console sẽ tạo ra các model, view, controller tương ứng trong dự án chickenrainshop, vào Sublime Text, mở dự án ra để kiểm tra.

Cấu trúc thư mục của một dự án CakePHP, và quy ước đặt tên, đọc thêm tại đây: https://kysutho.com/cakephp-bai-3-cau-truc-thu-muc-va-cac-quy-uoc-chung/

Để ý các thư mục sẽ làm việc nhiều với nó là: Config, Controller, Model, View và webroot.


Nhập dữ liệu mẫu vào để lập trình các chức năng.

Hoặc có thể tải một ít dữ liệu mẫu tại đây:
Hình ảnh:

-----------
Cập nhật 22/4/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web