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


