ฐานข้อมูล CodeIgniter: การกำหนดค่า แก้ไข อัปเดต ลบข้อมูล

ฐานข้อมูล Codeigniter

ในบทช่วยสอนก่อนหน้านี้ เราได้กล่าวถึงพื้นฐานของบันทึกที่ใช้งานอยู่ของ CodeIgniter และวิธีการแทรก อัปเดต ลบ และอ่านบันทึกจากฐานข้อมูล ในบทช่วยสอนนี้ เราจะสร้างแบบจำลองฐานข้อมูลและใช้แบบฟอร์มเพื่อสร้างและอัปเดตบันทึกฐานข้อมูล หากคุณยังใหม่กับการทำงานกับฐานข้อมูลใน CodeIgniter คุณแนะนำให้อ่านบทช่วยสอนก่อนหน้านี้

การกำหนดค่าฐานข้อมูล Codeigniter

เราจะเริ่มต้นด้วยการสร้างฐานข้อมูลโครงการการสอน เราจะสร้างฐานข้อมูลง่าย ๆ สำหรับการจัดการรายละเอียดการติดต่อ เราจะสร้างฐานข้อมูลง่าย ๆ ที่มีตารางสอง (2) ตารางชื่อ pals และเมืองที่พวกเขาอาศัยอยู่ ความสัมพันธ์ระหว่าง pals และ cities จะเป็นแบบหนึ่งต่อหนึ่งโดยมี id ใน cities เป็นคีย์หลักและ city_id เป็นคีย์ภายนอกในตาราง pals

เรียกใช้สคริปต์ต่อไปนี้เพื่อสร้างฐานข้อมูล:

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`)
);

ตอนนี้เรามาสร้างตารางเมืองกันดีกว่า

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

โมเดลฐานข้อมูล CodeIgniter

ตอนนี้เราจะสร้างแบบจำลองสำหรับฐานข้อมูลของเรา Model เป็นส่วน M ของ VMC- โมเดลนี้เกี่ยวข้องกับการเข้าถึงข้อมูล การจัดการข้อมูล และตรรกะทางธุรกิจ

ใน CodeIgniter แต่ละโมเดลจะต้องกำหนดวิธีการที่จะรองรับ แทนที่จะใช้โค้ดเดียวกันซ้ำในแต่ละโมเดล เราจะใช้ประโยชน์จากการสืบทอดในการเขียนโปรแกรมเชิงวัตถุ และสร้างคลาสโมเดลพาเรนต์ที่จะกำหนดวิธีการพื้นฐานที่เราต้องการให้โมเดลของเราสนับสนุน

ตารางด้านล่างแสดงวิธีการที่เราจะกำหนดและวิธีการเข้าถึงข้อมูล

S / N วิธี Descriptไอออน
1 __สร้าง กำหนดวิธีคอนสตรัคเตอร์ที่เรียกเมธอดคอนสตรัคเตอร์หลัก
2 รับ_ทั้งหมด ดึงฟิลด์และบันทึกทั้งหมดจากฐานข้อมูลโดยไม่มีเงื่อนไขใดๆ
3 get_by_id ดึงแถวเดียวจากฐานข้อมูลโดยใช้คีย์หลักของประเภท INT ชื่อ id
4 รับ_ที่ไหน ดึงข้อมูลเขตข้อมูลทั้งหมดจากฐานข้อมูลโดยยึดตามเกณฑ์
5 แทรก แทรกบันทึกใหม่ลงในฐานข้อมูล
6 ปรับปรุง อัปเดตบันทึกฐานข้อมูลที่มีอยู่ตามคีย์หลักของประเภท INT ชื่อ id
7 ลบ ลบบันทึกที่มีอยู่ออกจากฐานข้อมูลตามคีย์หลักของประเภท INT ชื่อ id

รูปภาพต่อไปนี้แสดงไดอะแกรมคลาสและความสัมพันธ์ระหว่างโมเดลย่อย Pals และ Cities กับโมเดลหลัก BaseModel

โมเดลฐานข้อมูล CodeIgniter

เราจะสร้างแบบจำลองสองแบบตามที่อธิบายไว้ในภาพด้านบน

สร้างคลาส BaseModel ใหม่ใน application/models/BaseModel.php

เพิ่มโค้ดดังต่อไปนี้:

<?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);
    }
}

ที่นี่

  • ป้องกัน $table = ”; กำหนดตัวแปรที่มีการป้องกันชื่อตาราง สิ่งนี้จะถูกเติมโดยคลาสย่อยที่เกี่ยวข้องเพื่อระบุตารางที่เมธอดคลาสโมเดลพื้นฐานของเราควรโต้ตอบด้วย
  • ฟังก์ชั่นสาธารณะ __construct() {…} กำหนดวิธีคอนสตรัคเตอร์และดำเนินการเมธอดคอนสตรัคเตอร์ของคลาสพาเรนต์ CI_Model
  • get_all() {…} ใช้ไลบรารีฐานข้อมูลและค่าของตัวแปร $table เพื่อเรียกใช้แบบสอบถาม SELECT กับฐานข้อมูลของเรา
  • get_by_id($id) {…} กำหนดวิธีการดึงข้อมูลแถวเดียวจากฐานข้อมูลและยอมรับพารามิเตอร์ $id ที่ควรเป็นประเภทข้อมูล INT
  • get_where($where) {…} กำหนดวิธีการ get ที่ให้คุณตั้งค่าคำสั่งย่อยได้
  • insert($data) {…} กำหนดวิธีการแทรกและยอมรับพารามิเตอร์อาร์เรย์ $data ที่มีค่าที่จะเขียนลงฐานข้อมูล
  • update($id, $data) {…} กำหนดวิธีการอัพเดตและยอมรับพารามิเตอร์อาร์เรย์ $data ที่มีค่าที่จะอัพเดตในฐานข้อมูล
  • Delete($id) {…} กำหนดวิธีการลบที่ยอมรับพารามิเตอร์ของ $id ซึ่งควรเป็นประเภทข้อมูล INT

ตอนนี้เราเสร็จสิ้นกับคลาสโมเดลหลักแล้ว มาสร้างโมเดล Pals ของเรากัน

สร้างไฟล์ใหม่ใน application/models/Pals.php

เพิ่มโค้ดดังต่อไปนี้:

<?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();
    }
}

ที่นี่

  • class Pals ขยาย BaseModel {…} ขยายโมเดลหลัก BaseModel และทำให้วิธีการทั้งหมดที่กำหนดไว้ใน BaseModel เข้าถึงคลาสลูกโดยอัตโนมัติ
  • ป้องกัน $table = 'เพื่อน'; กำหนดชื่อตารางที่เกี่ยวข้องกับโมเดลหลักของเรา
  • __construct() {…} เริ่มต้นคอนสตรัคเตอร์หลัก
  • ฟังก์ชั่นสาธารณะ get_by_id($id) {…} แทนที่ get_by_id เพื่อจัดเตรียมการใช้งานแบบกำหนดเองเฉพาะสำหรับรุ่น Pals แบบสอบถามสำหรับ get_by_id ใช้การรวมเพื่อดึงชื่อเมืองจากตารางเมือง
  • ฟังก์ชั่นสาธารณะ get_all() {…} แทนที่เมธอด get_all เพื่อใช้แบบสอบถามแบบรวมระหว่างเพื่อนและตารางเมือง

สร้างไฟล์ใหม่ใน application/models/Cities.php

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

ที่นี่

ป้องกัน $table = 'เมือง'; กำหนดตารางฐานข้อมูลโมเดล

ดังที่คุณเห็นจากโค้ดข้างต้น Inheritance ช่วยเราประหยัดเวลาได้มากเมื่อทำงานกับโมเดลใน CodeIgniter ในส่วนถัดไปเราจะเรียนรู้

ตัวควบคุมตัวจัดการรายชื่อติดต่อ

ตอนนี้เราได้สร้างโมเดลแล้ว เรามาสร้างคอนโทรลเลอร์สำหรับแอปพลิเคชันของเรากันดีกว่า เราจะมีตัวควบคุมสองตัวคือ ผู้ติดต่อ และ เมือง

เริ่มจากเมืองต่างๆ กันก่อน

สร้างไฟล์ใหม่ Cities.php ในไดเร็กทอรี application/controllers

เพิ่มโค้ดดังต่อไปนี้:

<?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'));
    }
}

ที่นี่

โค้ดข้างต้นใช้วิธีการทั้งหมดที่จำเป็นในการสร้าง อัปเดต ลบ และอ่านแถวจากฐานข้อมูล

สร้างไฟล์ Contacts.php อีกไฟล์ในแอปพลิเคชัน/ตัวควบคุม

เพิ่มโค้ดดังต่อไปนี้:

<?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'));
    }
}

มุมมองตัวจัดการผู้ติดต่อ

เราได้ดูแบบฟอร์มและการตรวจสอบความถูกต้องใน CodeIgniter ในบทช่วยสอนก่อนหน้านี้แล้ว เราจะใช้โค้ดที่เราพัฒนาขึ้นในบทช่วยสอนก่อนหน้านี้ เพื่อความสมบูรณ์ เราจะสร้างโค้ดที่เราสร้างขึ้นในบทช่วยสอนก่อนหน้านี้อีกครั้ง

มุมมองของแอปพลิเคชันของเราจะเป็นดังนี้

มุมมองตัวจัดการผู้ติดต่อ

คุณสามารถดาวน์โหลดโค้ดสำหรับมุมมองด้านบนได้โดยคลิกลิงก์ด้านล่าง

ดาวน์โหลดมุมมอง CodeIgniter Contacts Manager

สรุป

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการสร้างแบบจำลอง CodeIgniterเราใช้ประโยชน์จากการสืบทอดในการเขียนโปรแกรมเชิงวัตถุเพื่อส่งเสริมการนำรหัสกลับมาใช้ใหม่โดยการสร้างแบบจำลองฐานที่ใช้การดำเนินการฐานข้อมูลหลักสี่ประการ ได้แก่ การแทรก การอ่าน การอัปเดต และการลบ

เราได้สาธิตแนวคิดโดยใช้แอปพลิเคชันในทางปฏิบัติ และเราจะดำเนินการต่อไปในบทช่วยสอนถัดไปโดยเพิ่มฟังก์ชันต่างๆ เพิ่มเติมให้กับแอปพลิเคชัน