Ở 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 |
|---|---|
| Create | Thêm dữ liệu |
| Read | Đọc dữ liệu |
| Update | Cập nhật dữ liệu |
| Delete | Xó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ức | Mụ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$fillablehoặ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()vàfirst().Cập nhật dữ liệu với
update()và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() và 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




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