Pada tutorial ini, Anda akan belajar cara melakukan operasi CRUD (Create, Read, Update, Delete) di Laravel menggunakan Query Builder. Query Builder menyediakan antarmuka yang lebih fleksibel dan chainable untuk membuat query SQL, tetapi tetap aman dari serangan SQL Injection.
Perbedaan dengan Eloquent
- Eloquent ORM: Bekerja dengan objek model, lebih berorientasi objek. Cocok untuk tabel yang memiliki model.
- Query Builder: Bekerja langsung dengan tabel database, lebih berorientasi pada query SQL. Cocok untuk query yang kompleks atau untuk tabel yang tidak memiliki model.
Langkah 1: Mengambil Data (Read)
Untuk menampilkan data, kita menggunakan metode DB::table() untuk memilih tabel, diikuti dengan metode get().
Buka routes/web.php atau buat controller baru, dan tambahkan kode berikut:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
Route::get('/read', function () {
// Mengambil semua data dari tabel 'products'
$products = DB::table('products')->get();
// Mengambil data dengan kondisi WHERE
// $products = DB::table('products')->where('name', 'Product A')->get();
// Mengambil satu baris data
// $product = DB::table('products')->where('id', 1)->first();
return view('products', ['products' => $products]);
});
Penjelasan:
DB::table('products'): Ini adalah pintu masuk ke Query Builder, yang menargetkan tabelproducts.->get(): Mengembalikan semua baris dalam bentuk array dari objekstdClass.->where(...): Menambahkan klausaWHEREpada query.->first(): Mengambil hanya satu baris pertama dari hasil query.
Anda dapat menampilkan hasilnya di view yang sama seperti pada tutorial Eloquent sebelumnya.
Langkah 2: Menginput Data (Create)
Untuk menginput data, kita menggunakan metode insert() pada Query Builder.
use Illuminate\Http\Request;
Route::post('/create', function (Request $request) {
DB::table('products')->insert([
'name' => $request->input('name'),
'description' => $request->input('description'),
'created_at' => now(),
'updated_at' => now(),
]);
return redirect('/read')->with('success', 'Data berhasil ditambahkan!');
});
Penjelasan:
DB::table('products')->insert(...): Metode ini menerima sebuah array asosiatif di mana kunci-kunci adalah nama kolom dan nilai-nilai adalah data yang akan dimasukkan.now(): Helper Laravel untuk mendapatkan timestamp saat ini.
Langkah 3: Memperbarui Data (Update)
Untuk memperbarui data, kita menggunakan kombinasi where() dan update().
Route::put('/update/{id}', function (Request $request, $id) {
DB::table('products')
->where('id', $id)
->update([
'name' => $request->input('name'),
'description' => $request->input('description'),
'updated_at' => now(),
]);
return redirect('/read')->with('success', 'Data berhasil diperbarui!');
});
Penjelasan:
->where('id', $id): Sangat penting untuk menentukan data mana yang akan diperbarui. Jikawhere()tidak digunakan, semua baris di tabel akan terperbarui.->update(...): Metode ini menerima sebuah array data yang akan diperbarui.
Langkah 4: Menghapus Data (Delete)
Untuk menghapus data, kita menggunakan metode delete() setelah menentukan kondisi where().
Route::delete('/delete/{id}', function ($id) {
DB::table('products')
->where('id', $id)
->delete();
return redirect('/read')->with('success', 'Data berhasil dihapus!');
});
Penjelasan:
->where('id', $id): Sama sepertiupdate(), ini menentukan baris mana yang akan dihapus.->delete(): Mengeksekusi perintah hapus.
Menggabungkan ke dalam Controller
Praktik terbaik adalah menempatkan logika ini di dalam controller untuk memisahkan logika dari routing.
Contoh:
// app/Http/Controllers/ProductController.php
use App\Models\Product; // Jika masih ingin menggunakan
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; // Impor Query Builder
class ProductController extends Controller
{
public function index()
{
$products = DB::table('products')->get();
return view('products.index', ['products' => $products]);
}
public function store(Request $request)
{
// ... validasi
DB::table('products')->insert([
'name' => $request->input('name'),
'description' => $request->input('description'),
'created_at' => now(),
'updated_at' => now(),
]);
return redirect()->route('products.index');
}
public function update(Request $request, $id)
{
// ... validasi
DB::table('products')->where('id', $id)->update([
'name' => $request->input('name'),
'description' => $request->input('description'),
'updated_at' => now(),
]);
return redirect()->route('products.index');
}
public function destroy($id)
{
DB::table('products')->where('id', $id)->delete();
return redirect()->route('products.index');
}
}
Selesai!
Query Builder adalah alternatif yang kuat untuk Eloquent, terutama ketika Anda membutuhkan kontrol yang lebih besar atas query SQL atau bekerja dengan tabel yang tidak memiliki model. Dengan memahaminya, Anda memiliki lebih banyak opsi untuk berinteraksi dengan database di Laravel.