ฐานข้อมูล 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
เราจะสร้างแบบจำลองสองแบบตามที่อธิบายไว้ในภาพด้านบน
สร้างคลาส 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เราใช้ประโยชน์จากการสืบทอดในการเขียนโปรแกรมเชิงวัตถุเพื่อส่งเสริมการนำรหัสกลับมาใช้ใหม่โดยการสร้างแบบจำลองฐานที่ใช้การดำเนินการฐานข้อมูลหลักสี่ประการ ได้แก่ การแทรก การอ่าน การอัปเดต และการลบ
เราได้สาธิตแนวคิดโดยใช้แอปพลิเคชันในทางปฏิบัติ และเราจะดำเนินการต่อไปในบทช่วยสอนถัดไปโดยเพิ่มฟังก์ชันต่างๆ เพิ่มเติมให้กับแอปพลิเคชัน