Hướng dẫn Sử dụng Mô Hình trong ThinkPHP 5

Cách Sử Dụng Cơ Bản

Tạo mô hình User thông qua dòng lệnh:

php think make:model index/User

Gọi mô hình:

$nguoiDung = new \app\index\model\User();
$nguoiDung = $nguoiDung->where('id', 3)->find();
var_dump($nguoiDung->toArray());
$nguoiDung = model('user')->where('id', 3)->find();
var_dump($nguoiDung->toArray());

Thêm Dữ Liệu

Thêm một bản ghi:

$nguoiDung = new \app\index\model\User();
$nguoiDung->ten = 'nguyenvana';
$nguoiDung->trangThai = 1;
$nguoiDung->save();

Thêm nhiều bản ghi:

$nguoiDung = model('user');
$danhSach = [
    ['ten' => 'Nguyễn Văn A', 'trangThai' => 1],
    ['ten' => 'Nguyễn Văn B', 'trangThai' => 0]
];
$nguoiDung->saveAll($danhSach);

Cập Nhật Dữ Liệu

$nguoiDung = model('user')->where('id', 5)->find();
$nguoiDung->ten = 'Nguyễn Văn C';
$nguoiDung->save();

Xóa Dữ Liệu

$nguoiDung = model('user')->where('id', 5)->find();
$nguoiDung->delete();

Lấy Dữ Liệu

$nguoiDung = model('user')->get(6);
$nguoiDung = model('user')->where('id', 5)->find();
$dsNguoiDung = model('user')->where('id', '>', 6)->select();
foreach ($dsNguoiDung as $nguoiDung) {
    dump($nguoiDung->toArray());
}

Truy Vấn Tích Hợp

model('user')->count();
model('user')->max('id');
model('user')->min('id');
model('user')->avg('id');
model('user')->sum('id');

Getter

Mô hình User:

<?php

namespace app\index\model;

use think\Model;

class User extends Model
{
    public function getTrangThaiAttr($giaTri)
    {
        $trangThai = [-1 => 'Đã Xóa', 0 => 'Tắt', 1 => 'Hoạt Động', 2 => 'Chờ Duyệt'];
        return $trangThai[$giaTri];
    }
}

Trong Controller:

$nguoiDung = model('user')->where('id', 6)->find();
var_dump($nguoiDung->trangThai);

Setter

Mô hình User:

public function setTenAttr($giaTri)
{
    return strtolower($giaTri);
}

Trong Controller:

$nguoiDung = model('user')->where('id', 6)->find();
$nguoiDung->ten = 'NGUYENVANA';
$nguoiDung->save();

Thời Gian Tự Động Ghi Nhớ

Mô hình User:

protected $autoWriteTimestamp = true;
protected $autoWriteTimestamp = 'datetime';
// Định nghĩa tên trường thời gian
protected $createTime = 'tao_luc';
protected $updateTime = 'cap_nhat_luc';

Tầng Mô Hình

  • Tầng Dữ Liệu: app\index\model\User - Định nghĩa các phương thức xác thực và hoàn thành tự động cũng như các giao diện truy cập dữ liệu.
  • Tầng Logic: app\index\logic\User - Định nghĩa các logic kinh doanh liên quan đến người dùng.
  • Tầng Dịch Vụ: app\index\service\User - Định nghĩa các giao diện dịch vụ liên quan đến người dùng.

Ví dụ về các lớp:

app\index\model\User.php

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
}

Kiểm tra đối tượng: \think\Loader::model('User')

Lớp Logic: app\index\logic\User.php

<?php
namespace app\index\logic;

use think\Model;

class User extends Model
{
}

Kiểm tra đối tượng: \think\Loader::model('User', 'logic');

Lớp Dịch Vụ: app\index\service\User.php

<?php
namespace app\index\service;

use think\Model;

class User extends Model
{
}

Kiểm tra đối tượng: \think\Loader::model('User', 'service');

Chuyển Đổi Dữ Liệu Mô Hình

$nguoiDung->toArray();
$nguoiDung->toJson();

Sự Kiện Mô Hình

Mô hình User:

<?php

namespace app\index\model;

use think\Model;

class User extends Model
{
    // Khởi tạo
    protected function initialize()
    {
        parent::initialize();
        self::event('before_update', function ($nguoiDung) {
            // Xử lý sự kiện
        });
    }
}
Định Vị Mô Tả
before_insert Trước khi thêm mới
after_insert Sau khi thêm mới
before_update Trước khi cập nhật
after_update Sau khi cập nhật
before_write Trước khi ghi
after_write Sau khi ghi
before_delete Trước khi xóa
after_delete Sau khi xóa

Đăng ký nhanh:

User::beforeInsert(function ($nguoiDung) {
    if ($nguoiDung->trangThai != 1) {
        return false;
    }
});
Định Vị Mô Tả
beforeInsert Trước khi thêm mới
afterInsert Sau khi thêm mới
beforeUpdate Trước khi cập nhật
afterUpdate Sau khi cập nhật
beforeWrite Trước khi ghi
afterWrite Sau khi ghi
beforeDelete Trước khi xóa
afterDelete Sau khi xóa

Liên Kết Mô Hình

Liên kết một-một:

hasOne('Tên Mô Hình Liên Kết', 'Tên Khóa Ngoại', 'Tên Khóa Chính', ['Định Nghĩa Biệt Danh Mô Hình'], 'Loại Join');

Ví dụ sử dụng:

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    public function thongTinCaNhan()
    {
        return $this->hasOne('ThongTinCaNhan', 'id_nguoi_dung', 'id');
    }
}

Liên kết một-nhiều:

hasMany('Tên Mô Hình Liên Kết', 'Tên Khóa Ngoại', 'Tên Khóa Chính', ['Định Nghĩa Biệt Danh Mô Hình']);

Ví dụ sử dụng:

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    public function binhLuan(){
        return $this->hasMany('BinhLuan', 'id_nguoi_dung', 'id');
    }
}

Thẻ: ThinkPHP5 model CRUD Relationships events

Đăng vào ngày 8 tháng 8 lúc 06:23