Nhảy tới nội dung
Phiên bản: 7.0.0

Model

Mỗi bảng cơ sở dữ liệu có một “Model” tương ứng dùng để tương tác với bảng đó. Ngoài việc truy xuất các bản ghi từ bảng cơ sở dữ liệu, các mô hình Model còn cho phép bạn chèn, cập nhật và xóa các bản ghi khỏi bảng.

Tạo class model

Để thao tác với một bảng trong cơ sở dữ liệu bạn có thể tạo một model bằng cách kế thừa lại class model

use Skilldo\Model\Model;

class ExModel extends Model
{
// ...
}

Table Name

Khai báo tên table trong database mà model sẽ theo tác

use Skilldo\Model\Model;

class ExModel extends Model
{
static string $table = 'ex_modal_table';
// ...
}

Truy xuất một hàng/cột từ một bảng

Nếu bạn chỉ cần truy xuất một hàng từ bảng cơ sở dữ liệu, bạn có thể sử dụng phương thức get hoặc first của model. Phương thức này sẽ trả về một đối tượng stdClass duy nhất:

Phương thức get nhận vào một Query Builder để tạo câu lệnh query

$ex = ExModel::get(Qr::set('id', 10));
//hoặc
$ex = ExModel::where('id', 10)->first();

Truy xuất danh sách các giá trị cột

Nếu bạn cần lấy danh sách dữ liệu từ bảng cơ sở dữ liệu, bạn có thể sử dụng phương thức gets hoặc fetch của model. Phương thức này sẽ trả về một đối tượng Illuminate\Support\Collection chứa các stdClass:

Phương thức nhận vào một Query Builder để tạo câu lệnh query

$ex = = ExModel::get(Qr::set()->where('id', '<=', 20));
//hoặc
$ex = ExModel::where('id', '<=', 20)->fetch();

Đếm số lượng hàng data

Nếu bạn cần đếm danh sách dữ liệu từ bảng cơ sở dữ liệu, bạn có thể sử dụng phương thức count hoặc amount của model. Phương thức này sẽ trả về số int:

Phương thức nhận vào một Query Builder để tạo câu lệnh query

$ex = ExModel::count(Qr::set('id','<=', 20));
//hoặc
$ex = ExModel::where('id', '<=', 20)->amount();

Thêm data vào table

model cũng cung cấp phương thức create có thể được sử dụng để chèn các bản ghi vào bảng cơ sở dữ liệu.

Phương thức create chấp nhận một mảng tên và giá trị cột, sau khi add thành công phương thức add sẽ trả về id của trường vừa add vào:

ExModel::create([
'username' => 'exampleUsername',
'password' => '123',
'email' => 'example@example.com'
]);

Cập nhật data trong table

model cũng cung cấp phương thức update có thể được sử dụng để cập nhật các bản ghi trong bảng cơ sở dữ liệu.

ExModel::where('id', 20)->update(['email' => 'exampleUp@example.com']);

Xóa data trong table

Phương pháp delete của model có thể được sử dụng để xóa các bản ghi khỏi bảng. Phương thức delete trả về số lượng hàng bị ảnh hưởng. Bạn có thể hạn chế các câu lệnh xóa bằng cách thêm Query Builder vào phương thức delete:

$usersCount = ExModel::delete(Qr::set()->where('id', '<=', 20));
//hoặc
$usersCount = ExModel::where('id', '<=', 20)->remove();

Insert

Phương thức insert sẽ tiến hành thêm mới hoặc cập nhật dữ liệu theo các điều kiện mà cms đưa ra, method insert xác định hành động thêm mới hay cập nhật bằng trường id

//Thêm mới
ExModel::insert([
'title' => 'đây là tiêu đề',
'excerpt' => 'đây là mô tả',
]);
//cập nhật
ExModel::insert([
'id' => 10,
'title' => 'đây là tiêu đề',
'excerpt' => 'đây là mô tả',
]);

Columns

Để sử dụng phương thức insert bạn cần khai báo danh sách cột trong bảng cần sử dụng

use Skilldo\Model\Model;

class ExModel extends Model
{
static string $table = 'ex_modal_table';

static array $columns = [
'title' => ['string'],
'slug' => ['string'],
'content' => ['wysiwyg'],
'excerpt' => ['wysiwyg'],
'seo_title' => ['string'],
'seo_description' => ['string'],
'seo_keywords' => ['string'],
'status' => ['int', 0],
'image' => ['image'],
'post_type' => ['string', 'post'],
'public' => ['int', 1],
];
}

Các column thông thường như title, name, content... sẻ trỏ đến một mãng chứa giá trị đầu là loại dữ liệu sẽ được lọc, giá trị thứ 2 là giá trị mặc định Các loại dữ liệu được hỗ trợ

Loại dữ liệuMô tảHành động
intSố nguyênDữ liệu sẽ được đưa về số nguyên
floatSố thập phânDữ liệu sẽ được đưa về số thập phân
stringChuổiDữ liệu sẽ được lọc các thành phần code như html sẽ bị xóa bỏ
slugChuổi slugDữ liệu sẽ được lọc các thành phần code như html sẽ bị xóa bỏ và đưa về dạng slug
wysiwygChuổiDữ liệu sẽ giữ lại code như html
priceGiáDữ liệu sẽ lọc chỉ giữ lại dấu , hay .
imageHình ảnhDữ liệu sẽ lọc về dạng link hình ảnh của cms
filefileDữ liệu sẽ lọc về dạng link file của cms
arrayarrayDữ liệu nhận vào nếu là array sẽ mã hóa serialize về dạng chuổi

Rules insert

Để thiết lập các quy định khi insert data bạn sử dụng thuộc tính rules

static array $rules = [
'slug' => [
'type' => 'post',
'controller' => 'frontend/post/detail/',
'dependent' => 'title'
],
'created' => true,
'updated' => true,
'user_created' => true,
'user_updated' => true,
'language' => false,
'add' => [
'takeIt' => [
'seo_title' => 'title',
'seo_description' => 'excerpt',
],
'require' => [
'title' => 'Tiêu đề trang không được để trống'
]
],
'hooks' => [
'columns' => 'columns_db_branch',
'data' => 'pre_insert_branch_data',
]
];
  • slug dùng để tạo router cho một module trong cms
Loại dữ liệuKiểuMô tả
typestringModule dữ liệu
controllerstringđường dẫn controller chạy module
dependentstringkhi slug rỗng sẽ dùng column này để tạo slug
  • Một số cấu hình thêm cho việc insert
Loại dữ liệuMô tả
creatednếu true khi thêm dữ liệu sẽ tự động thêm thời gian vào column created
updatednếu true khi cập nhật dữ liệu sẽ tự động thêm thời gian vào column updated
user_creatednếu true khi cập nhật dữ liệu sẽ tự động thêm id user hiện đang thao tác vào column user_created
user_updatednếu true khi cập nhật dữ liệu sẽ tự động thêm id user hiện đang thao tác vào column user_updated
languageModule dữ liệu để thêm vào bảng language
getQrKhi cập nhật data cần lấy object trước đó theo id nếu bạn muốn tùy chỉnh điều kiện lấy dữ liệu có thể sử dụng getQr
  • hooks dùng để thay đổi các hook mặc định của method insert

    Loại dữ liệuKiểuMô tả
    columnsstringTên hook dùng để cập nhật các trường columns
    datastringTên hook dùng để cập nhật các dữ liệu trước khi add hoặc update vào database
  • add Để thêm một số quy định cho lúc thêm mới dữ liệu

Loại dữ liệuMô tả
takeItDanh sách các trường nếu bỏ trống sẽ tự động lấy dư liệu của trường khác thay thế
requireDanh sách các trường bắt buộc điền