CodeΒάση δεδομένων Igniter: Ρύθμιση παραμέτρων, ενημέρωση και διαγραφή δεδομένων
⚡ Έξυπνη Σύνοψη
CodeΗ βάση δεδομένων Igniter δημιουργεί μοντέλα και ελεγκτές για έναν διαχειριστή επαφών που υποστηρίζεται από MySQLΈνα κοινόχρηστο BaseModel υλοποιεί την εισαγωγή, την ανάγνωση, την ενημέρωση και τη διαγραφή, και τα θυγατρικά μοντέλα Pals και Cities το κληρονομούν, επομένως οι ελεγκτές επαναχρησιμοποιούν τις ίδιες λειτουργίες βάσης δεδομένων σε όλη την εφαρμογή.

CodeΒάση δεδομένων Igniter
Στο προηγούμενο σεμινάριο, καλύψαμε τα βασικά του CodeΕνεργή εγγραφή Igniter και πώς να εισάγετε, να ενημερώνετε, να διαγράφετε και να διαβάζετε εγγραφές από τη βάση δεδομένων. Σε αυτό το σεμινάριο, θα δημιουργήσουμε μοντέλα βάσεων δεδομένων και θα χρησιμοποιήσουμε φόρμες για να δημιουργήσουμε και να ενημερώσουμε εγγραφές βάσης δεδομένων. Εάν είστε εντελώς νέοι στην εργασία με βάσεις δεδομένων στο CodeΑνάφλεξη, σας συμβουλεύουμε να διαβάσετε το προηγούμενο σεμινάριο πρώτη.
CodeΡύθμιση παραμέτρων βάσης δεδομένων ανάφλεξης
Θα ξεκινήσουμε δημιουργώντας τη βάση δεδομένων του έργου του εκπαιδευτικού προγράμματος. Θα δημιουργήσουμε μια απλή βάση δεδομένων για τη διαχείριση των στοιχείων επικοινωνίας, με δύο πίνακες με ονόματα "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`) );
CodeΜοντέλα βάσης δεδομένων ανάφλεξης
Θα δημιουργήσουμε τώρα μοντέλα για τη βάση δεδομένων μας. Το μοντέλο είναι το μέρος M της MVC. Το μοντέλο ασχολείται με την πρόσβαση δεδομένων, τον χειρισμό δεδομένων και την επιχειρηματική λογική.
In CodeΣτο Igniter, κάθε μοντέλο πρέπει να ορίσει τις μεθόδους που θα υποστηρίζει. Αντί να επαναλαμβάνουμε τον ίδιο κώδικα σε κάθε μοντέλο, θα εκμεταλλευτούμε την κληρονομικότητα στον αντικειμενοστρεφή προγραμματισμό και θα δημιουργήσουμε μια γονική κλάση μοντέλου που θα ορίζει τις βασικές μεθόδους που θέλουμε να υποστηρίζουν τα μοντέλα μας.
Ο παρακάτω πίνακας δείχνει τις μεθόδους που θα ορίσουμε και τον τρόπο πρόσβασης στα δεδομένα.
| S / N | Μέθοδος | Περιγραφή |
|---|---|---|
| 1 | __κατασκευάσει | Ορίζει τη μέθοδο κατασκευαστή που καλεί τη γονική μέθοδο κατασκευαστή. |
| 2 | Πάρτα ολα | Ανακτά όλα τα πεδία και τις εγγραφές από τη βάση δεδομένων χωρίς καμία συνθήκη. |
| 3 | get_by_id | Ανακτά μία μόνο γραμμή από τη βάση δεδομένων χρησιμοποιώντας το πρωτεύον κλειδί τύπου INT με όνομα id. |
| 4 | get_where | Ανακτά όλα τα πεδία από τη βάση δεδομένων με βάση τα δεδομένα κριτήρια. |
| 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); } }
Εδώ:
- protected $table = ”; ορίζει μια προστατευμένη μεταβλητή με το όνομα table. Αυτή συμπληρώνεται από την αντίστοιχη θυγατρική κλάση για να καθορίσει με ποιον πίνακα θα πρέπει να αλληλεπιδρούν οι μέθοδοι του βασικού μοντέλου.
- Η public function __construct() {…} ορίζει τον κατασκευαστή και εκτελεί τον κατασκευαστή της γονικής κλάσης CI_Model.
- Η get_all() {…} χρησιμοποιεί τη βιβλιοθήκη βάσης δεδομένων και την τιμή του $table για να εκτελέσει το ερώτημα SELECT.
- Η get_by_id($id) {…} ανακτά μία μόνο γραμμή και δέχεται μια παράμετρο $id τύπου δεδομένων INT.
- Η get_where($where) {…} ορίζει μια μέθοδο get που σας επιτρέπει να ορίσετε μια ρήτρα where.
- Η insert($data) {…} δέχεται την παράμετρο πίνακα $data που περιέχει τις τιμές που θα εγγραφούν στη βάση δεδομένων.
- Η εντολή update($id, $data) {…} δέχεται την παράμετρο πίνακα $data που περιέχει τις τιμές που θα ενημερωθούν.
- Η delete($id) {…} δέχεται μια παράμετρο $id τύπου δεδομένων INT.
Τώρα που τελειώσαμε με την κλάση γονικού μοντέλου, ας δημιουργήσουμε το μοντέλο Pals. Δημιουργήστε ένα νέο αρχείο στο application/models/Pals_model.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(); } }
Εδώ:
- Η κλάση Pals_model επεκτείνει το γονικό μοντέλο BaseModel {…} και καθιστά αυτόματα όλες τις μεθόδους του προσβάσιμες στην θυγατρική κλάση.
- protected $table = 'pals'; ορίζει το όνομα του πίνακα που σχετίζεται με αυτό το μοντέλο.
- Η __construct() {…} αρχικοποιεί τον γονικό κατασκευαστή.
- Η public function get_by_id($id) {…} παρακάμπτει το get_by_id για να παρέχει μια προσαρμοσμένη υλοποίηση. Το ερώτημα χρησιμοποιεί μια ένωση για να ανακτήσει το όνομα της πόλης από τον πίνακα πόλεων.
- Η public function get_all() {…} παρακάμπτει την get_all για να υλοποιήσει ένα ερώτημα σύνδεσης μεταξύ των πινάκων pals και cities.
Δημιουργήστε ένα νέο αρχείο στο application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Εδώ:
- προστατευμένο $table = 'πόλεις'; ορίζει τον πίνακα βάσης δεδομένων μοντέλου.
Όπως μπορείτε να δείτε, η κληρονομικότητα μας εξοικονομεί πολύ χρόνο όταν εργαζόμαστε με μοντέλα σε CodeΑναπτήρ.
Ελεγκτές Διαχείρισης Επαφών
Τώρα που έχουμε δημιουργήσει τα μοντέλα, ας δημιουργήσουμε τους ελεγκτές για την εφαρμογή μας. Θα έχουμε δύο ελεγκτές, τις Πόλεις και τις Επαφές. Ας ξεκινήσουμε με τις Πόλεις. Δημιουργήστε ένα νέο αρχείο 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 στο application/controllers και προσθέστε τον ακόλουθο κώδικα:
<?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 στα προηγούμενα μαθήματα και θα χρησιμοποιήσουμε τον κώδικα που αναπτύξαμε εκεί. Για λόγους πληρότητας, οι προβολές της εφαρμογής μας θα έχουν ως εξής:
Μπορείτε να κατεβάσετε τον κώδικα για τις προβολές κάνοντας κλικ στον παρακάτω σύνδεσμο:
CodeΛήψη προβολών του Igniter Contacts Manager


