CRUD dengan Eloquent
Operasi create, read, update, delete dengan Eloquent plus trik updateOrCreate dan soft delete.
Create: tiga cara
use App\Models\Post;
// 1. Mass assignment (butuh $fillable)
$post = Post::create([
'judul' => 'Belajar Laravel',
'slug' => 'belajar-laravel',
'isi' => 'Isi postingan...',
'status' => 'published',
]);
// 2. Manual lalu save()
$post = new Post;
$post->judul = 'Judul Baru';
$post->slug = 'judul-baru';
$post->isi = 'Isi...';
$post->save();
// 3. Cari dulu, buat kalau tidak ada
$post = Post::firstOrCreate(
['slug' => 'belajar-laravel'],
['judul' => 'Belajar Laravel', 'isi' => 'Isi...']
);firstOrCreate dan updateOrCreate mencegah duplikasi data secara elegan, cocok untuk seeder dan sinkronisasi.
Update dan delete
$post = Post::find(1);
$post->update(['judul' => 'Judul Revisi']); // massal, hormati $fillable
Post::where('status', 'draft')->update(['status' => 'arsip']); // update massal
$post->delete(); // hapus satu
Post::destroy([1, 2, 3]); // hapus banyak by IDPerhatikan: update() massal lewat query builder tidak menjalankan event model (seperti updating atau observer). Kalau kamu butuh event, ambil modelnya dulu lalu update satu per satu.
Soft delete: hapus tanpa hilang
Kadang data "dihapus" harus bisa dikembalikan. Tambahkan kolom deleted_at:
php artisan make:migration add_deleted_at_to_posts_table --table=posts// di migration
$table->softDeletes();
// di model
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
}Setelah itu $post->delete() hanya mengisi deleted_at, datanya tetap ada. Query normal otomatis mengecualikan data yang di-soft-delete. Untuk mengaksesnya:
Post::withTrashed()->get(); // termasuk yang dihapus
Post::onlyTrashed()->get(); // hanya yang dihapus
$post->restore(); // kembalikan
$post->forceDelete(); // hapus permanenCatatan teknis:
Post::where(...)->delete()massal tidak memicu event modeldeleting/deleted. Kalau ada observer yang membersihkan file terkait atau cache, pakai loop->each->delete()atau ambil dulu koleksinya. Ini jebakan klasik yang bikin file yatim di storage.