Βάση δεδομένων CodeIgniter: Διαμόρφωση, Επεξεργασία, Ενημέρωση, Διαγραφή δεδομένων
Βάση δεδομένων Codeigniter
Στο προηγούμενο σεμινάριο, καλύψαμε τα βασικά της ενεργής εγγραφής CodeIgniter και τον τρόπο εισαγωγής, ενημέρωσης, διαγραφής και ανάγνωσης εγγραφών από τη βάση δεδομένων. Σε αυτό το σεμινάριο, θα δημιουργήσουμε μοντέλα βάσεων δεδομένων και θα χρησιμοποιήσουμε φόρμες για να δημιουργήσουμε και να ενημερώσουμε εγγραφές βάσης δεδομένων. εάν είστε εντελώς νέοι στην εργασία με βάσεις δεδομένων στο CodeIgniter, τότε σας συμβουλεύατε να διαβάσετε το προηγούμενο σεμινάριο
Διαμόρφωση βάσης δεδομένων Codeigniter
Θα ξεκινήσουμε δημιουργώντας τη βάση δεδομένων του εκπαιδευτικού έργου. Θα δημιουργήσουμε μια απλή βάση δεδομένων για τη διαχείριση των στοιχείων επικοινωνίας. Θα δημιουργήσουμε μια απλή βάση δεδομένων με δύο (2) πίνακες τα ονόματα των φίλων και των πόλεων στις οποίες ζουν. Η σχέση μεταξύ των φίλων και των πόλεων είναι ένα προς ένα με το id στις πόλεις ως πρωτεύον κλειδί και το city_id ως ξένο κλειδί στους πίνακες φίλους .
Εκτελέστε τα ακόλουθα σενάρια για να δημιουργήσετε τη βάση δεδομένων:
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
Τώρα θα δημιουργήσουμε μοντέλα για τη βάση δεδομένων μας. Το Μοντέλο είναι το Μ μέρος του MVC. Το μοντέλο ασχολείται με την πρόσβαση δεδομένων, τον χειρισμό δεδομένων και την επιχειρηματική λογική.
Στο CodeIgniter, κάθε μοντέλο πρέπει να ορίσει τις μεθόδους που θα υποστηρίζει. Αντί να επαναλαμβάνουμε τον ίδιο κώδικα σε κάθε μοντέλο, θα εκμεταλλευτούμε την κληρονομικότητα στον αντικειμενοστραφή προγραμματισμό και θα δημιουργήσουμε μια κλάση γονικού μοντέλου που θα ορίζει τις βασικές μεθόδους που θέλουμε να υποστηρίζουν τα μοντέλα μας.
Ο παρακάτω πίνακας δείχνει τις μεθόδους που θα ορίσουμε και τον τρόπο πρόσβασης στα δεδομένα.
S / N | Μέθοδος | Descriptιόν |
---|---|---|
1 | __κατασκευάσει | Καθορίζει τη μέθοδο κατασκευής που καλεί τη μέθοδο γονικού κατασκευαστή |
2 | Πάρτα ολα | Ανακτά όλα τα πεδία και τις εγγραφές από τη βάση δεδομένων χωρίς όρους |
3 | get_by_id | Ανακτά μια μεμονωμένη σειρά από τη βάση δεδομένων χρησιμοποιώντας το πρωτεύον κλειδί τύπου INT με όνομα id |
4 | get_where | Ανακτά όλα τα πεδία από τη βάση δεδομένων με βάση τα βασικά κριτήρια |
5 | εισάγετε | Εισάγει μια νέα εγγραφή στη βάση δεδομένων |
6 | ενημέρωση | Ενημερώνει μια υπάρχουσα εγγραφή βάσης δεδομένων με βάση το πρωτεύον κλειδί τύπου INT με όνομα id |
7 | διαγράψετε | Διαγράφει μια υπάρχουσα εγγραφή από τη βάση δεδομένων με βάση το πρωτεύον κλειδί τύπου INT με όνομα id |
Η ακόλουθη εικόνα δείχνει το διάγραμμα τάξης και τον τρόπο με τον οποίο τα παιδικά μοντέλα Pals and 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) Το {…} ορίζει τη μέθοδο λήψης που σας επιτρέπει να ορίσετε έναν όρο όπου.
- 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 στον κατάλογο εφαρμογών/ελεγκτών
Προσθέστε τον παρακάτω κώδικα
<?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. Εκμεταλλευτήκαμε την κληρονομικότητα στον αντικειμενοστραφή προγραμματισμό για να προωθήσουμε την επαναχρησιμοποίηση κώδικα δημιουργώντας ένα βασικό μοντέλο που υλοποιεί τις τέσσερις κύριες λειτουργίες της βάσης δεδομένων εισαγωγής, ανάγνωσης, ενημέρωσης και διαγραφής.
Έχουμε δείξει τις έννοιες χρησιμοποιώντας μια πρακτική εφαρμογή και θα συνεχίσουμε να το κάνουμε στα επόμενα σεμινάρια προσθέτοντας περισσότερη λειτουργικότητα στην εφαρμογή.