NexaUI framework menyediakan metode sederhana dan efisien untuk operasi Create, Read, Update, dan Delete (CRUD) melalui NexaModel.
Untuk menambahkan data baru ke database, NexaModel menyediakan metode insert()
:
// Insert data tunggal
$data = [
'username' => 'johndoe',
'email' => 'john@example.com',
'password' => password_hash('secret', PASSWORD_DEFAULT),
'created_at' => date('Y-m-d H:i:s')
];
$success = $this->Storage('users')->insert($data);
// $success akan berisi true jika berhasil, false jika gagal
// Insert multiple records sekaligus
$users = [
[
'username' => 'user1',
'email' => 'user1@example.com',
'role' => 'member',
'created_at' => date('Y-m-d H:i:s')
],
[
'username' => 'user2',
'email' => 'user2@example.com',
'role' => 'member',
'created_at' => date('Y-m-d H:i:s')
],
[
'username' => 'user3',
'email' => 'user3@example.com',
'role' => 'admin',
'created_at' => date('Y-m-d H:i:s')
]
];
$success = $this->Storage('users')->insertMany($users);
// Insert atau update jika sudah ada (berdasarkan unique key)
$data = [
'email' => 'john@example.com', // Anggap ini adalah unique key
'username' => 'johndoe',
'last_login' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
];
// Update semua kolom jika terjadi duplikat
$success = $this->Storage('users')->upsert($data);
// Update hanya kolom tertentu jika terjadi duplikat
$success = $this->Storage('users')->upsert($data, ['last_login', 'updated_at']);
// Insert data dan dapatkan ID terakhir
$data = [
'username' => 'newuser',
'email' => 'newuser@example.com',
'created_at' => date('Y-m-d H:i:s')
];
$this->Storage('users')->insert($data);
$lastId = $this->db->lastInsertId();
Untuk membaca data dari database, NexaModel menyediakan berbagai metode:
// Mengambil semua data
$users = $this->Storage('users')->get();
// Dengan kolom tertentu
$users = $this->Storage('users')->select('id, username, email')->get();
// Dengan kondisi
$activeUsers = $this->Storage('users')
->where('status', 'active')
->get();
// Mengambil baris pertama
$user = $this->Storage('users')->first();
// Mengambil baris berdasarkan ID
$user = $this->Storage('users')->where('id', 1)->first();
// Mengambil baris atau throw exception jika tidak ditemukan
try {
$user = $this->Storage('users')->where('id', 1)->firstOrFail();
} catch (Exception $e) {
// Handle error: user tidak ditemukan
}
// Mengambil nilai dari satu kolom
$email = $this->Storage('users')->where('id', 1)->value('email');
// Mengambil array nilai dari satu kolom
$emails = $this->Storage('users')->where('status', 'active')->pluck('email');
// Mengambil array key-value (id => email)
$emailsById = $this->Storage('users')->pluck('email', 'id');
// Cek apakah data ada
$exists = $this->Storage('users')
->where('email', 'john@example.com')
->exists();
// Menghitung jumlah baris
$count = $this->Storage('users')
->where('status', 'active')
->count();
Untuk memperbarui data yang sudah ada, NexaModel menyediakan metode update()
:
// Update data dengan kondisi
$data = [
'status' => 'inactive',
'updated_at' => date('Y-m-d H:i:s')
];
$success = $this->Storage('users')
->where('last_login', '<', '2023-01-01')
->update($data);
// $success akan berisi true jika berhasil, false jika gagal
// Increment nilai kolom
$success = $this->Storage('products')
->where('id', 1)
->increment('views'); // Tambah 1
// Increment dengan nilai tertentu
$success = $this->Storage('products')
->where('id', 1)
->increment('stock', 5); // Tambah 5
// Increment dengan update kolom lain
$success = $this->Storage('products')
->where('id', 1)
->increment('views', 1, ['updated_at' => date('Y-m-d H:i:s')]);
// Decrement nilai kolom
$success = $this->Storage('products')
->where('id', 1)
->decrement('stock', 2); // Kurang 2
Untuk menghapus data, NexaModel menyediakan metode delete()
:
// Delete data dengan kondisi
$success = $this->Storage('users')
->where('status', 'inactive')
->delete();
// Delete by ID
$success = $this->Storage('users')
->where('id', 1)
->delete();
// Force delete - hati-hati, ini berbahaya!
// Hanya gunakan jika benar-benar yakin dan dengan kondisi WHERE
$success = $this->Storage('logs')
->where('created_at', '<', '2023-01-01')
->forceDelete();
Peringatan: Selalu gunakan kondisi WHERE saat melakukan operasi delete untuk menghindari penghapusan semua data secara tidak sengaja. NexaModel memiliki pengaman untuk mencegah delete tanpa WHERE, tetapi tetap harus berhati-hati.
Untuk operasi yang melibatkan beberapa query dan memerlukan konsistensi data, gunakan transactions:
// Menggunakan transaction untuk memastikan konsistensi data
try {
$this->Storage('users')->transaction(function($db) {
// Operasi 1: Insert user
$userId = $db->table('users')->insert([
'username' => 'newuser',
'email' => 'newuser@example.com',
'created_at' => date('Y-m-d H:i:s')
]);
// Operasi 2: Insert profile
$db->table('profiles')->insert([
'user_id' => $userId,
'bio' => 'New user profile',
'created_at' => date('Y-m-d H:i:s')
]);
// Jika semua operasi berhasil, transaction akan di-commit
return true;
});
// Transaction berhasil
$this->setFlash('success', 'User berhasil dibuat');
} catch (Exception $e) {
// Jika terjadi error, transaction akan di-rollback
$this->setFlash('error', 'Gagal membuat user: ' . $e->getMessage());
}
NexaModel juga menyediakan metode generik untuk operasi CRUD yang lebih sederhana:
// Insert record
$id = $this->Storage('users')->insertRecord('users', [
'username' => 'newuser',
'email' => 'newuser@example.com'
]); // Otomatis menambahkan created_at dan updated_at
// Update record by ID
$success = $this->Storage('users')->updateRecord('users', [
'status' => 'active',
'email' => 'updated@example.com'
], 1); // Otomatis menambahkan updated_at
// Delete record by ID
$success = $this->Storage('users')->deleteRecord('users', 1);
// Find record by ID
$user = $this->Storage('users')->findRecord('users', 1);