Database CodeIgniter: Konfigurasi, Edit, Perbarui, Hapus Data

Basis Data Codeigniter

Pada tutorial sebelumnya, kita telah membahas dasar-dasar record aktif CodeIgniter dan cara menyisipkan, memperbarui, menghapus, dan membaca record dari database. Dalam tutorial ini, kita akan membuat model database dan menggunakan formulir untuk membuat dan memperbarui catatan database. jika Anda masih baru dalam bekerja dengan database di CodeIgniter, maka Anda disarankan untuk membaca tutorial sebelumnya

Konfigurasi Basis Data Codeigniter

Kita akan mulai dengan membuat basis data proyek tutorial. Kita akan membuat basis data sederhana untuk mengelola detail kontak. Kita akan membuat basis data sederhana dengan dua (2) tabel yang diberi nama pals dan kota tempat tinggal mereka. Hubungan antara pals dan kota bersifat satu-satu dengan id di kota 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 membuat tabel kota

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

Model Basis Data CodeIgniter

Kami sekarang akan membuat model untuk database kami. Model adalah bagian M dari MVC. Model ini berkaitan dengan akses data, manipulasi data, dan logika bisnis.

Di CodeIgniter, setiap model harus mendefinisikan metode yang akan didukungnya. Daripada mengulangi kode yang sama di setiap model, kita akan memanfaatkan pewarisan dalam pemrograman berorientasi objek dan membuat kelas model induk yang akan menentukan metode dasar yang kita ingin dukung oleh model kita.

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

S / N metode Description
1 __membangun Mendefinisikan metode konstruktor yang memanggil metode konstruktor induk
2 dapat semua Mengambil semua bidang dan catatan dari database tanpa syarat apa pun
3 dapatkan_oleh_id Mengambil satu baris dari database menggunakan kunci utama tipe INT bernama id
4 dapatkan_di mana Mengambil semua bidang dari database berdasarkan kriteria yang ada
5 menyisipkan Menyisipkan catatan baru ke dalam database
6 memperbarui Memperbarui catatan database yang ada berdasarkan kunci utama tipe INT bernama id
7 hapus Menghapus catatan yang ada dari database berdasarkan kunci utama tipe INT bernama id

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

Model Basis Data CodeIgniter

Kami akan membuat dua model seperti yang dijelaskan pada gambar di atas

Buat kelas BaseModel baru di application/models/BaseModel.php

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,

  • dilindungi $tabel = ”; mendefinisikan variabel yang dilindungi bernama tabel. Ini akan diisi oleh masing-masing kelas anak untuk menentukan tabel mana yang harus berinteraksi dengan metode kelas model dasar kita.
  • public function __construct() {…} mendefinisikan metode konstruktor dan mengeksekusi metode konstruktor dari kelas induk CI_Model.
  • get_all() {…} menggunakan perpustakaan database dan nilai variabel $table untuk menjalankan query SELECT terhadap database kita.
  • get_by_id($id) {…} mendefinisikan metode untuk mengambil satu baris dari database dan menerima parameter $id yang harus bertipe data INT.
  • get_where($where) {…} mendefinisikan metode get yang memungkinkan Anda menyetel klausa Where.
  • insert($data) {…} mendefinisikan metode penyisipan dan menerima parameter array $data yang berisi nilai yang akan ditulis ke database.
  • update($id, $data) {…} mendefinisikan metode pembaruan dan menerima parameter array $data yang berisi nilai yang akan diperbarui dalam database.
  • delete($id) {…} mendefinisikan metode penghapusan yang menerima parameter $id yang harus bertipe data INT.

sekarang kita sudah selesai dengan kelas model induk, mari buat model Pals kita

Buat file baru di application/models/Pals.php

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,

  • class Pals extends BaseModel {…} memperluas model induk BaseModel dan secara otomatis membuat semua metode yang ditentukan dalam BaseModel diakses ke kelas anak.
  • dilindungi $tabel = 'teman'; mendefinisikan nama tabel yang terkait dengan model induk kita
  • __construct() {…} menginisialisasi konstruktor induk
  • public function get_by_id($id) {…} menggantikan get_by_id untuk menyediakan implementasi khusus khusus untuk model Pals. Kueri get_by_id menggunakan gabungan untuk mengambil nama kota dari tabel kota
  • public function get_all() {…} menimpa metode get_all untuk mengimplementasikan kueri gabungan antara tabel teman dan kota

Buat file baru di application/models/Cities.php

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

SINI,

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

Seperti yang bisa Anda lihat dari kode yang diberikan di atas, Inheritance menghemat banyak waktu ketika bekerja dengan model di CodeIgniter. Di bagian selanjutnya, kita akan belajar

Pengontrol Manajer Kontak

Sekarang kita telah membuat modelnya, mari kita buat pengontrol untuk aplikasi kita. Kami akan memiliki dua pengontrol yaitu Kontak dan Kota

Mari kita mulai dengan kota

Buat file baru Cities.php di direktori application/controllers

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 diperlukan untuk membuat, memperbarui, menghapus, dan membaca baris dari database.

Buat file lain Contacts.php di aplikasi/pengontrol

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 melihat form dan validasi di CodeIgniter di tutorial sebelumnya. Kami akan menggunakan kode yang kami kembangkan di tutorial sebelumnya. Demi kelengkapan, kami akan mereproduksi kode yang kami buat pada tutorial sebelumnya.

Tampilan aplikasi kita adalah sebagai berikut

Tampilan Manajer Kontak

Anda dapat mendownload kode untuk tampilan di atas dengan mengklik link di bawah

Unduh Tampilan Manajer Kontak CodeIgniter

Kesimpulan

Dalam tutorial ini, Anda akan mempelajari cara membuat model CodeIgniterKami memanfaatkan pewarisan dalam pemrograman berorientasi objek untuk meningkatkan penggunaan kembali kode dengan membuat model dasar yang mengimplementasikan empat operasi basis data utama, yaitu memasukkan, membaca, memperbarui, dan menghapus.

Kami telah menunjukkan konsep tersebut menggunakan aplikasi praktis, dan kami akan terus melakukannya dalam tutorial berikutnya dengan menambahkan lebih banyak fungsi ke aplikasi tersebut.