CodeDatabase Igniter: Konfigurasi, Perbarui & Hapus Data

⚡ Ringkasan Cerdas

CodeIgniter Database membangun model dan controller untuk pengelola kontak yang didukung oleh MySQLSebuah BaseModel bersama mengimplementasikan operasi insert, read, update, dan delete, dan model turunan Pals dan Cities mewarisinya, sehingga controller menggunakan kembali operasi database yang sama di seluruh aplikasi.

  • Skema: Dua tabel yang saling terkait, pals dan cities, memodelkan hubungan satu-ke-satu berdasarkan kunci asing.
  • ⚙️ Config: File database.php mengatur koneksi dan memuat pustaka basis data.
  • 🧬 Model Dasar: Model induk mendefinisikan get_all, get_by_id, get_where, insert, update, dan delete.
  • 👨‍👩‍👧 Warisan: Pals dan Cities memperluas BaseModel, sehingga mereka menggunakan kembali metode-metodenya dan menimpa (override) jika diperlukan.
  • 🔗 Bergabung: Model Pals menggabungkan kota-kota untuk mengambil nama kota beserta detail kontaknya.
  • Pengontrol: Pengontrol Kota dan Kontak menghubungkan model, formulir, dan validasi secara bersamaan.
  • ♻️ Penggunaan kembali: Pewarisan menghilangkan kode CRUD yang berulang dan menjaga model tetap ramping.

CodeBasis Data Igniter

CodeBasis Data Igniter

Pada tutorial sebelumnya, kita telah membahas dasar-dasar tentang CodeIgniter Active Record dan cara menyisipkan, memperbarui, menghapus, dan membaca data dari basis data. Dalam tutorial ini, kita akan membuat model basis data dan menggunakan formulir untuk membuat dan memperbarui data basis data. Jika Anda benar-benar baru dalam bekerja dengan basis data, tutorial ini cocok untuk Anda. CodeIgniter, Anda disarankan untuk membaca tutorial sebelumnya pertama.

CodeKonfigurasi Basis Data Igniter

Kita akan mulai dengan membuat basis data proyek tutorial. Kita akan membuat basis data sederhana untuk mengelola detail kontak, dengan dua tabel bernama pals dan kota tempat mereka tinggal. Hubungan antara pals dan cities adalah satu-ke-satu, dengan id di tabel cities sebagai kunci utama dan city_id sebagai kunci asing di tabel pals.

Jalankan skrip berikut untuk membuat database:

CREATE TABLE `pals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`city_id` int(11) DEFAULT NULL,
`contact_name` varchar(245) DEFAULT NULL,
`contact_number` varchar(245) DEFAULT NULL,
`email_address` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
);

Sekarang mari kita buat tabel kota-kota:

CREATE TABLE `cities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
);

CodeModel Basis Data Igniter

Sekarang kita akan membuat model untuk basis data kita. Model adalah bagian M dari MVC. Model ini berkaitan dengan akses data, manipulasi data, dan logika bisnis.

In CodeDi Igniter, setiap model harus mendefinisikan metode yang akan didukungnya. Alih-alih mengulang kode yang sama di setiap model, kita akan memanfaatkan pewarisan dalam pemrograman berorientasi objek dan membuat kelas model induk yang mendefinisikan metode dasar yang ingin kita dukung pada model kita.

Tabel di bawah ini menunjukkan metode yang akan kita tentukan dan bagaimana data akan diakses.

S / N metode Deskripsi
1 __membangun Mendefinisikan metode konstruktor yang memanggil metode konstruktor induk.
2 dapat semua Mengambil semua kolom dan catatan dari basis data tanpa syarat apa pun.
3 dapatkan_oleh_id Mengambil satu baris dari basis data menggunakan kunci utama bertipe INT bernama id.
4 dapatkan_di mana Mengambil semua kolom dari basis data berdasarkan kriteria yang diberikan.
5 menyisipkan Memasukkan data baru ke dalam basis data.
6 memperbarui Memperbarui catatan basis data yang sudah ada berdasarkan kunci utama bertipe INT bernama id.
7 hapus Menghapus data yang sudah ada dari basis data berdasarkan kunci utama bertipe INT bernama id.

Gambar berikut menunjukkan diagram kelas dan bagaimana model anak Pals dan Cities berhubungan dengan model induk BaseModel.

Diagram kelas BaseModel dengan model Pals dan Cities

Kita akan membuat dua model seperti yang dijelaskan pada gambar di atas. Buat kelas baru bernama BaseModel di application/models/BaseModel.php dan tambahkan kode berikut:

<?php

class BaseModel extends CI_Model {

protected $table = '';

public function __construct() {
parent::__construct();
}

public function get_all() {
return $this->db->get($this->table)
->result();
}

public function get_by_id($id) {
return $this->db->get_where($this->table, array('id' => $id))
->row();
}

public function get_where($where) {
return $this->db->where($where)
->get($this->table)
->result();
}

public function insert($data) {
return $this->db->insert($this->table, $data);
}

public function update($id, $data) {
$this->db->where('id', $id);
$this->db->update($this->table, $data);
}

public function delete($id) {
$this->db->where('id', $id);
$this->db->delete($this->table);
}
}

Sini:

  • `protected $table = ”;` mendefinisikan variabel terlindungi bernama `table`. Variabel ini diisi oleh kelas turunan terkait untuk menentukan tabel mana yang harus diinteraksi oleh metode model dasar.
  • public function __construct() {…} mendefinisikan konstruktor dan mengeksekusi konstruktor dari kelas induk CI_Model.
  • get_all() {…} menggunakan pustaka basis data dan nilai $table untuk menjalankan kueri SELECT.
  • get_by_id($id) {…} mengambil satu baris dan menerima parameter $id dengan tipe data INT.
  • get_where($where) {…} mendefinisikan metode get yang memungkinkan Anda untuk menetapkan klausa where.
  • insert($data) {…} menerima parameter array $data yang berisi nilai-nilai yang akan ditulis ke dalam basis data.
  • update($id, $data) {…} menerima parameter array $data yang berisi nilai-nilai yang akan diperbarui.
  • delete($id) {…} menerima parameter $id dengan tipe data INT.

Setelah kita selesai dengan kelas model induk, mari kita buat model Pals kita. Buat file baru di application/models/Pals_model.php dan tambahkan kode berikut:

<?php

class Pals_model extends BaseModel {

protected $table = 'pals';

public function __construct() {
parent::__construct();
}

public function get_by_id($id) {
$this->db->where('pals.id', $id);
$this->db->select('pals.*,cities.name');
$this->db->from('pals');
$this->db->join('cities', 'pals.city_id = cities.id');
$query = $this->db->get();
return $query->row();
}

public function get_all() {
$this->db->select('pals.*,cities.name');
$this->db->from('pals');
$this->db->join('cities', 'pals.city_id = cities.id');
$query = $this->db->get();
return $query->result();
}
}

Sini:

  • Kelas Pals_model memperluas BaseModel {…} memperluas model induk BaseModel dan secara otomatis membuat semua metodenya dapat diakses oleh kelas anak.
  • protected $table = 'pals'; mendefinisikan nama tabel yang terkait dengan model ini.
  • __construct() {…} menginisialisasi konstruktor induk.
  • public function get_by_id($id) {…} menimpa get_by_id untuk menyediakan implementasi khusus. Kueri ini menggunakan join untuk mengambil nama kota dari tabel cities.
  • public function get_all() {…} menimpa get_all untuk mengimplementasikan kueri gabungan antara tabel pals dan cities.

Buat file baru di application/models/Cities_model.php:

<?php
class Cities_model extends BaseModel {
protected $table = 'cities';

public function __construct() {
parent::__construct();
}
}

Sini:

  • dilindungi $tabel = 'kota'; mendefinisikan tabel database model.

Seperti yang Anda lihat, pewarisan menghemat banyak waktu kita saat bekerja dengan model di CodeAlat penyala.

Pengontrol Manajer Kontak

Setelah membuat model, mari kita buat controller untuk aplikasi kita. Kita akan memiliki dua controller, Cities dan Contacts. Mari kita mulai dengan Cities. Buat file baru Cities.php di direktori application/controllers dan tambahkan kode berikut:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Cities extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
$this->load->library('form_validation');
$this->load->model('cities_model');
}

public function index() {
$header['title'] = 'Cities Listing';
$data['pals'] = $this->cities_model->get_all();

$this->load->view('header',$header);
$this->load->view('cities/index', $data);
$this->load->view('footer');
}

public function create() {
$header['title'] = 'Create City';

$this->load->view('header',$header);
$this->load->view('cities/create');
$this->load->view('footer');
}

public function store() {
$rules = array(
array(
'field' => 'name',
'label' => 'City Name',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == TRUE) {
$data = array('name' => $this->input->post('name'));
$this->cities_model->insert($data);

redirect(base_url('cities'));
} else {
$header['title'] = 'Create City';

$this->load->view('header',$header);
$this->load->view('cities/create');
$this->load->view('footer');
}
}

public function edit($id) {
$header['title'] = 'Edit City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('cities/edit', $data);
$this->load->view('footer');
}

public function update($id) {
$rules = array(
array(
'field' => 'name',
'label' => 'City Name',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == TRUE) {
$data = array('name' => $this->input->post('name'));
$this->cities_model->update($id,$data);

redirect(base_url('cities'));
} else {
$header['title'] = 'Edit City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header',$header);
$this->load->view('cities/create',$data);
$this->load->view('footer');
}
}

public function delete($id) {
$header['title'] = 'Delete City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('cities/delete', $data);
$this->load->view('footer');
}

public function destroy($id) {
$this->cities_model->delete($id);

redirect(base_url('cities'));
}
}

Sini:

  • Kode di atas mengimplementasikan semua metode yang dibutuhkan untuk membuat, memperbarui, menghapus, dan membaca baris dari basis data.

Buat file lain bernama Contacts.php di application/controllers dan tambahkan kode berikut:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
$this->load->library('form_validation');
$this->load->model('pals_model');
}

public function index() {
$header['title'] = 'Contacts List';
$data['pals'] = $this->pals_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/index', $data);
$this->load->view('footer');
}

public function create() {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/create', $data);
$this->load->view('footer');
}

public function store() {
$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
),
array(
'field' => 'city_id',
'label' => 'City',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == FALSE) {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/create', $data);
$this->load->view('footer');
} else {
$data = array(
'city_id' => $this->input->post('city_id'),
'contact_name' => $this->input->post('contact_name'),
'contact_number' => $this->input->post('contact_number'),
'email_address' => $this->input->post('email_address'),
);

$this->pals_model->insert($data);

redirect(base_url('contacts'));
}
}

public function edit($id) {
$this->load->model('cities_model');
$header['title'] = 'Edit Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('contacts/edit', $data);
$this->load->view('footer');
}

public function update($id) {
$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
),
array(
'field' => 'city_id',
'label' => 'City',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == FALSE) {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('contacts/edit', $data);
$this->load->view('footer');
} else {
$data = array(
'city_id' => $this->input->post('city_id'),
'contact_name' => $this->input->post('contact_name'),
'contact_number' => $this->input->post('contact_number'),
'email_address' => $this->input->post('email_address'),
);

$this->pals_model->update($id, $data);

redirect(base_url('contacts'));
}
}

public function delete($id) {
$this->load->model('cities_model');
$header['title'] = 'Delete Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header',$header);
$this->load->view('contacts/delete',$data);
$this->load->view('footer');
}

public function destroy($id){
$this->pals_model->delete($id);

redirect(base_url('contacts'));
}
}

Tampilan Manajer Kontak

Kita sudah membahas formulir dan validasi di CodeKita akan menggunakan Igniter dalam tutorial sebelumnya, dan kita akan menggunakan kode yang telah kita kembangkan di sana. Untuk melengkapi penjelasan, tampilan aplikasi kita akan terlihat seperti berikut:

Tampilan pengelola kontak

Anda dapat mengunduh kode untuk tampilan tersebut dengan mengklik tautan di bawah ini:

CodeUnduh Tampilan Pengelola Kontak Igniter

Pertanyaan Umum Demo Slot

Sebuah BaseModel menyimpan metode insert, read, update, dan delete yang digunakan bersama hanya sekali. Model turunan mewarisinya dan hanya menimpa apa yang berbeda, yang menghilangkan duplikasi dan menjaga agar setiap model tetap kecil.

Setiap kontak menyimpan city_id, bukan nama kota. Penggantian ini menggabungkan tabel kota sehingga kueri mengembalikan nama kota yang mudah dibaca bersama setiap kontak dalam satu hasil.

Controller memuat model, memvalidasi formulir yang dikirimkan, dan kemudian menyimpan data lalu mengarahkan ulang, atau memuat ulang formulir dengan kesalahan. Controller menghubungkan model, view, dan library validasi.

Ya. Dari definisi tabel Anda, AI dapat menghasilkan BaseModel dengan metode CRUD dan satu model anak per tabel, menambahkan penggantian join di mana kunci asing memerlukan label yang mudah dibaca. RevLihat hasil penggabungan yang dihasilkan.

Pustaka basis data menyediakan kueri mentah dan metode Active Record. Sebuah model membungkus panggilan tersebut menjadi operasi yang bermakna dan dapat digunakan kembali untuk tabel tertentu, menjaga...ping akses data keluar dari pengontrol.

Ringkaslah postingan ini dengan: