Trong môn phái Laravel, có hai tuyệt kỹ khiến bao lập trình giả tranh luận không ngừng: create và insert. Nghe thì tưởng đồng môn, nhưng thực ra hai chiêu này đi hai con đường nội công khác biệt, dùng sai hoàn cảnh là tự đâm vào chân mình như chơi.
Hôm nay, để tránh huynh đệ tẩu hỏa nhập ma, ta sẽ mở cuộn tàn thư và giải thích cho rõ ràng.
1. Giang hồ đồn rằng create và insert giống nhau?
Câu trả lời là KHÔNG, KHÔNG, KHÔNG có nhưng.
Cả hai đều có thể thêm dữ liệu vào database, nhưng bản chất nội công hoàn toàn khác nhau.
2. Tuyệt kỹ “create”: Một chiêu nội công thâm sâu của Eloquent
“Một chiêu xuất ra, mang theo linh khí đất trời, tự động vận hành đủ thứ bí thuật.”
✔ Đặc điểm:
- Tạo một Eloquent Model instance.
- Tự động chạy:
- Mass Assignment check (fillable/guarded)
- Mutators (setXxxAttribute)
- Accessors khi load lại
- Casting
- Events: creating → created
- Timestamps: created_at / updated_at
- Trả về model đầy đủ, dùng tiếp mượt như lụa.
Ví dụ:
User::create([
'name' => 'Lệnh Hồ Xung',
'email' => 'xung.lenh@vdhoangson.com',
]);
📌 Khi nên dùng:
- Khi cần logic của model được kích hoạt.
- Khi muốn dùng tiếp model (ví dụ gửi event, xử lý quan hệ, truy cập property).
- Khi muốn code sạch, “chuẩn Eloquent”.
🧨 Nhược điểm:
- Chậm hơn insert vì chạy nhiều tầng nhiều lớp để thi triển nội công.
- Không phù hợp với bulk insert số lượng lớn.
3. Tuyệt kỹ “insert”: Đao pháp nhanh, mạnh, gọn… nhưng vô tình vô nghĩa
“Nhanh như gió, mạnh như bão, nhưng chẳng để lại chút linh lực nào.”
✔ Đặc điểm:
- Gửi SQL trực tiếp xuống database.
- Không tạo model instance.
- Không chạy:
- Events
- Mutators
- Casting
- Fillable
- Timestamps (nếu muốn phải tự thêm)
- Trả về bool, không phải model.
Ví dụ:
DB::table('users')->insert([
'name' => 'Đông Phương Bất Bại',
'email' => 'dong.phuong@vdhoangson.com',
'created_at' => now(),
]);
📌 Khi nên dùng:
- Insert nhiều dòng cùng lúc (bulk insert).
- Không cần events, timestamps, mutators.
- Tối ưu tốc độ cho các tác vụ nặng.
⚡ Ưu điểm:
- Rất nhanh, nhanh hơn NYC lật mặt.
- Thích hợp cho queue, sync, seed dữ liệu lớn.
🧨 Nhược điểm:
- Không nhận model trả về.
- Không hưởng quyền lợi của Eloquent.
- Không có gì, không có gì cả.
🥋 4. So găng: Create vs Insert
| Tính năng | create | insert |
|---|---|---|
| Tạo model instance | ✔ | ❌ |
| Chạy events | ✔ | ❌ |
| Chạy mutator/accessor | ✔ | ❌ |
| Tự động timestamps | ✔ | ❌ |
| Trả về model | ✔ | ❌ |
| Tốc độ | Chậm hơn | Nhanh hơn |
| Insert hàng loạt | Không tối ưu | Rất mạnh |
5. Kết luận bí pháp
- Muốn “đúng chuẩn Eloquent”, cần sự tinh tế → dùng create.
- Muốn “xuất chiêu sấm sét”, tốc độ thần sầu → dùng insert.
- Mỗi tuyệt kỹ có chỗ phát huy riêng; cao thủ giang hồ là người biết dùng đúng lúc, đúng chỗ, đừng nên cố chấp.









