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ứ Sáu, 17 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 11 — CRUD bằng Eloquent: Thêm, đọc, sửa và xóa dữ liệu trong Laravel 12

Ở bài trước, chúng ta đã tìm hiểu Model và cách Eloquent ORM ánh xạ giữa đối tượng và bảng dữ liệu.

Trong bài học này, chúng ta sẽ bắt đầu thao tác trực tiếp với cơ sở dữ liệu thông qua Eloquent mà không cần viết các câu lệnh SQL.

Đây là một trong những lý do khiến Laravel trở thành framework PHP được yêu thích nhất hiện nay.


CRUD là gì?

CRUD là bốn thao tác cơ bản với dữ liệu:

Chức năngÝ nghĩa
CreateThêm dữ liệu
ReadĐọc dữ liệu
UpdateCập nhật dữ liệu
DeleteXóa dữ liệu

Hầu hết các hệ thống quản lý như:

  • Blog

  • Website tin tức

  • Bán hàng

  • Quản lý nhân sự

  • Quản lý sinh viên

đều xoay quanh bốn thao tác này.


Chuẩn bị Model

Ví dụ chúng ta có Model:

Post

tương ứng với bảng:

posts

và đã khai báo:

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

Create()

Thêm dữ liệu mới:

Post::create([
    'title' => 'Laravel 12',
    'content' => 'Học Eloquent ORM',
    'category_id' => 1
]);

Laravel sẽ tự động sinh câu lệnh SQL để thêm dữ liệu vào bảng posts.

Điều kiện để create() hoạt động là Model phải khai báo thuộc tính $fillable hoặc $guarded phù hợp.


all()

Lấy toàn bộ dữ liệu:

$posts = Post::all();

Kết quả trả về là một Collection chứa tất cả bản ghi trong bảng.

Hiển thị:

foreach ($posts as $post) {
    echo $post->title;
}

all() thích hợp với bảng có ít dữ liệu.

Nếu bảng có hàng nghìn hoặc hàng triệu bản ghi, nên sử dụng paginate() hoặc chunk() để tối ưu hiệu năng.


find()

Lấy dữ liệu theo khóa chính.

Ví dụ:

$post = Post::find(1);

Laravel sẽ tìm bản ghi có:

id = 1

Nếu tìm thấy:

echo $post->title;

Nếu không tồn tại:

$post

sẽ nhận giá trị:

null

first()

Lấy bản ghi đầu tiên:

$post = Post::first();

Hoặc:

$post = Post::latest()->first();

Thường dùng khi chỉ cần lấy một bản ghi duy nhất.


update()

Cập nhật dữ liệu:

$post = Post::find(1);

$post->update([
    'title' => 'Laravel 12 LTS'
]);

Laravel sẽ tự động cập nhật bản ghi có id = 1.

Có thể cập nhật nhiều cột cùng lúc:

$post->update([
    'title' => 'Laravel',
    'content' => 'Nội dung mới'
]);

delete()

Xóa dữ liệu:

$post = Post::find(1);

$post->delete();

Laravel sẽ xóa bản ghi tương ứng khỏi cơ sở dữ liệu.


Tạo Model rồi lưu

Ngoài create(), có thể tạo đối tượng trước:

$post = new Post();

$post->title = "Laravel";
$post->content = "Bài viết mới";
$post->category_id = 1;

$post->save();

Phương thức:

save()

sẽ thêm dữ liệu nếu đối tượng chưa tồn tại.


Cập nhật bằng save()

Ví dụ:

$post = Post::find(1);

$post->title = "Laravel Framework";

$post->save();

save() sẽ tự động nhận biết đây là bản ghi đã tồn tại và thực hiện cập nhật.


Kiểm tra dữ liệu tồn tại

Trước khi cập nhật hoặc xóa nên kiểm tra:

$post = Post::find(100);

if ($post) {
    $post->delete();
}

Điều này giúp tránh lỗi khi bản ghi không tồn tại.


findOrFail()

Laravel còn cung cấp:

$post = Post::findOrFail(1);

Nếu không tìm thấy dữ liệu, Laravel sẽ tự động trả về lỗi 404 Not Found.

Đây là cách được sử dụng rất nhiều trong các Controller.


Ví dụ hoàn chỉnh

use App\Models\Post;

// Thêm
Post::create([
    'title' => 'Laravel 12',
    'content' => 'Eloquent ORM',
    'category_id' => 1
]);

// Lấy tất cả
$posts = Post::all();

// Lấy theo ID
$post = Post::find(1);

// Cập nhật
$post->update([
    'title' => 'Laravel Framework'
]);

// Xóa
$post->delete();

Chỉ với vài dòng mã, chúng ta đã thực hiện đầy đủ các thao tác CRUD mà không cần viết SQL.


Khi nào nên dùng từng phương thức?

Phương thứcMục đích
create()Thêm dữ liệu nhanh
all()Lấy toàn bộ dữ liệu
find()Tìm theo khóa chính
first()Lấy bản ghi đầu tiên
update()Cập nhật dữ liệu
save()Thêm hoặc cập nhật đối tượng
delete()Xóa dữ liệu
findOrFail()Tự động trả lỗi 404 nếu không tìm thấy

Một số lưu ý

  • create() yêu cầu khai báo $fillable hoặc $guarded.

  • Không nên dùng all() với bảng có quá nhiều dữ liệu.

  • Luôn kiểm tra dữ liệu tồn tại trước khi cập nhật hoặc xóa, hoặc sử dụng findOrFail().

  • Ưu tiên sử dụng Eloquent thay vì viết SQL thủ công để mã nguồn dễ đọc và dễ bảo trì.


Tổng kết

Trong bài học này, chúng ta đã thực hiện đầy đủ bốn thao tác CRUD bằng Eloquent ORM:

  • Thêm dữ liệu với create().

  • Lấy dữ liệu bằng all(), find()first().

  • Cập nhật dữ liệu với update()save().

  • Xóa dữ liệu bằng delete().

  • Xử lý trường hợp không tìm thấy dữ liệu với findOrFail().

Đến đây, bạn đã có thể thao tác với cơ sở dữ liệu theo phong cách hướng đối tượng mà không cần viết các câu lệnh SQL.

Ở bài tiếp theo, chúng ta sẽ học Query Builder, tìm hiểu các phương thức như where(), orWhere(), orderBy(), latest()paginate() để xây dựng các truy vấn linh hoạt, tối ưu và phù hợp với những ứng dụng có lượng dữ liệu lớn.

x1

quay về MỤC LỤC

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

Đăng nhận xét

Facebook Youtube RSS