NTM Solutions

Bài đăng nổi bật

🚀 Laravel 12 (2026) — Từ PHP Core đến Full Stack📘

Nếu cập nhật theo Laravel 12 LTS (2026) thì mình sẽ chia thành các phần như sau để người học đi từ PHP Core → Laravel → Triển khai dự án th...

Thứ Năm, 16 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 10 — Model trong Laravel 12: Làm việc với dữ liệu bằng Eloquent ORM

Sau khi hoàn thành phần Database, chúng ta đã biết cách tạo bảng (Migration), thêm dữ liệu mẫu (Seeder) và sinh dữ liệu giả bằng Factory.

Tuy nhiên, cho đến thời điểm này chúng ta vẫn chưa thực sự làm việc với dữ liệu trong ứng dụng.

Trong Laravel, việc thao tác với cơ sở dữ liệu được thực hiện thông qua Eloquent ORM và thành phần quan trọng nhất chính là Model.


Model là gì?

Model là lớp đại diện cho một bảng trong cơ sở dữ liệu.

Có thể hiểu đơn giản:

  • Một Model ↔ Một bảng (Table)

  • Một đối tượng Model ↔ Một bản ghi (Record)

Ví dụ:

ModelBảng
Userusers
Postposts
Categorycategories

Nhờ Model, chúng ta không cần viết các câu lệnh SQL thông thường mà vẫn có thể truy vấn và thao tác dữ liệu theo phong cách hướng đối tượng.


Eloquent ORM là gì?

ORM (Object Relational Mapping) là kỹ thuật ánh xạ giữa đối tượngcơ sở dữ liệu.

Thay vì viết:

SELECT * FROM posts;

Laravel cho phép:

Post::all();

Hay thay vì:

INSERT INTO posts (...)

chúng ta chỉ cần:

Post::create([
    // dữ liệu
]);

Đây là lý do Eloquent trở thành một trong những điểm mạnh của Laravel.


Tạo Model

Laravel hỗ trợ tạo Model bằng Artisan.

Ví dụ:

php artisan make:model Post

Laravel sẽ tạo:

app/
└── Models/
    └── Post.php

Nếu muốn tạo luôn Migration và Factory:

php artisan make:model Post -mf

Hoặc tạo đầy đủ Controller, Migration, Factory và Seeder:

php artisan make:model Post -mfsc

Các tùy chọn này giúp tiết kiệm rất nhiều thời gian khi phát triển dự án.


Cấu trúc Model

Ví dụ Model Post:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
}

Model kế thừa từ:

Illuminate\Database\Eloquent\Model

Nhờ đó chúng ta có thể sử dụng toàn bộ tính năng của Eloquent ORM.


Quy ước tên bảng

Laravel mặc định tự suy ra tên bảng từ tên Model.

Ví dụ:

ModelTable
Userusers
Postposts
Categorycategories

Laravel sẽ tự động thêm chữ s ở cuối tên Model.

Vì vậy, Model Post sẽ làm việc với bảng posts mà không cần cấu hình thêm.


Khai báo Table

Trong một số trường hợp, tên bảng không theo quy ước của Laravel.

Ví dụ:

tbl_posts

Khi đó cần khai báo:

protected $table = 'tbl_posts';

Laravel sẽ sử dụng bảng này thay vì bảng mặc định.


Primary Key

Laravel mặc định sử dụng khóa chính:

id

Nếu bảng sử dụng khóa chính khác:

protected $primaryKey = 'post_id';

Eloquent sẽ tự động sử dụng khóa này trong các thao tác truy vấn.


Fillable

Đây là một trong những thuộc tính quan trọng nhất của Model.

Ví dụ:

protected $fillable = [
    'title',
    'content',
    'category_id'
];

fillable là danh sách các cột được phép gán dữ liệu hàng loạt (Mass Assignment).

Ví dụ:

Post::create([
    'title' => 'Laravel 12',
    'content' => '...',
    'category_id' => 1
]);

Nếu một cột không nằm trong fillable, Laravel sẽ không cho phép ghi dữ liệu bằng create() hoặc update() theo dạng mảng.

Đây là cơ chế bảo vệ giúp tránh việc ghi nhầm hoặc ghi trái phép vào các cột quan trọng.


Guarded

Ngược lại với fillable, thuộc tính guarded dùng để chỉ định những cột không được phép gán hàng loạt.

Ví dụ:

protected $guarded = [
    'id'
];

Hoặc:

protected $guarded = [];

Điều này có nghĩa là tất cả các cột đều có thể được gán dữ liệu.

Cách này thường chỉ nên sử dụng trong các dự án nhỏ hoặc khi bạn hiểu rõ dữ liệu được xử lý.


Fillable hay Guarded?

Thông thường, bạn chỉ nên sử dụng một trong hai.

Ví dụ an toàn:

protected $fillable = [
    'title',
    'content',
    'category_id'
];

Thay vì:

protected $guarded = [];

Trong các dự án thực tế, fillable thường được ưu tiên hơn vì giúp kiểm soát dữ liệu tốt hơn và giảm nguy cơ phát sinh lỗ hổng bảo mật.


Ví dụ Model hoàn chỉnh

class Post extends Model
{
    protected $fillable = [
        'title',
        'content',
        'category_id'
    ];
}

Đây là cấu hình phổ biến trong hầu hết các dự án Laravel.


Một số quy ước của Eloquent

Laravel mặc định:

  • Model nằm trong app/Models.

  • Tên Model viết ở dạng số ít (Post, User, Category).

  • Tên bảng ở dạng số nhiều (posts, users, categories).

  • Khóa chính là id.

  • Có hai cột thời gian:

    • created_at

    • updated_at

Nhờ các quy ước này, lập trình viên rất ít khi phải cấu hình thêm.


Tổng kết

Trong bài học này, chúng ta đã tìm hiểu:

  • Model là gì.

  • Eloquent ORM hoạt động như thế nào.

  • Tạo Model bằng Artisan.

  • Quy ước tên bảng trong Laravel.

  • Khai báo bảng bằng $table.

  • Khai báo khóa chính bằng $primaryKey.

  • Thuộc tính $fillable.

  • Thuộc tính $guarded.

  • Khi nào nên dùng fillableguarded.

Ở bài tiếp theo, chúng ta sẽ bắt đầu thực hiện CRUD bằng Eloquent, học cách thêm, lấy, cập nhật và xóa dữ liệu thông qua các phương thức như create(), all(), find(), update()delete() mà không cần viết câu lệnh SQL.

x1

quay về MỤC LỤC

Không có nhận xét nào:

Đăng nhận xét

Facebook Youtube RSS