CodeIgniter Lucrul cu baza de date
În tutorialul anterior, am abordat elementele de bază ale înregistrării active CodeIgniter și modul de inserare, actualizare, ștergere și citire a înregistrărilor din baza de date. În acest tutorial, vom crea modele de baze de date și vom folosi formulare pentru a crea și actualiza înregistrările bazei de date. dacă sunteți complet nou în ceea ce privește lucrul cu bazele de date în CodeIgniter, atunci vă recomandăm să citiți tutorialul anterior
Configurarea bazei de date
Vom începe prin crearea bazei de date a proiectului tutorial. Vom crea o bază de date simplă pentru gestionarea detaliilor de contact. Vom crea o bază de date simplă cu două (2) tabele cu nume de prieteni și orașe în care trăiesc. Relația dintre prieteni și orașe este unu-la-unu cu id în orașe ca cheie primară și city_id ca cheie străină în tabelele de prieteni .
Rulați următoarele scripturi pentru a crea baza de date:
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`));
Să creăm acum tabela orașelor
CREATE TABLE `cities` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(245) DEFAULT NULL,PRIMARY KEY (`id`)) ;
Modele de baze de date CodeIgniter
Acum vom crea modele pentru baza noastră de date. Modelul este partea M a MVC. Modelul tratează accesul la date, manipularea datelor și logica de afaceri.
În CodeIgniter, fiecare model trebuie să definească metodele pe care le va suporta. În loc să repetăm același cod în fiecare model, vom profita de moștenire în programarea orientată pe obiecte și vom crea o clasă de model părinte care va defini metodele de bază pe care dorim să le susțină modelele noastre.
Tabelul de mai jos prezintă metodele pe care le vom defini și modul în care datele vor fi accesate.
S / N | Metodă | Descriere |
1 | __construi | Definește metoda constructor care apelează metoda constructor părinte |
2 | ia tot | Preluează toate câmpurile și înregistrările din baza de date fără nicio condiție |
3 | get_by_id | Preluează un singur rând din baza de date folosind cheia primară de tip INT numită id |
4 | ajunge_unde | Preluează toate câmpurile din baza de date pe baza criteriilor bazate pe |
5 | introduce | Inserează o nouă înregistrare în baza de date |
6 | Actualizați | Actualizează o înregistrare de bază de date existentă pe baza cheii primare de tip INT numit id |
7 | șterge | Șterge o înregistrare existentă din baza de date pe baza cheii primare de tip INT numit id |
Următoarea imagine prezintă diagrama clasei și modul în care modelele copilului Pals and Cities se raportează la modelul părinte BaseModel.
Vom crea două modele așa cum este descris în imaginea de mai sus
Creați o nouă clasă BaseModel în application / models / BaseModel.php
Adăugați următorul cod
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);}}
AICI,
- protejat $ tabel = ""; definește o variabilă protejată numită tabel. Aceasta va fi completată de clasa copil respectivă pentru a specifica cu ce tabel ar trebui să interacționeze metodele noastre de clasă model de bază.
- funcția publică __construct () {…} definește metoda constructorului și execută metoda constructorului clasei părinte CI_Model.
- get_all () {…} folosește biblioteca de baze de date și valoarea variabilei $ tabel pentru a rula interogarea SELECT în baza noastră de date.
- get_by_id ($ id) {...} definește metoda pentru extragerea unui singur rând din baza de date și acceptă un parametru $ id care ar trebui să fie de tip INT.
- get_where ($ where) {...} definește metoda get care vă permite să setați o clauză where.
- insert ($ data) {...} definește metoda insert și acceptă parametrul matricei $ data care conține valorile care trebuie scrise în baza de date.
- actualizare ($ id, $ date) {...} definește metoda de actualizare și acceptă parametrul matricei $ data care conține valorile care trebuie actualizate în baza de date.
- delete ($ id) {...} definește metoda de ștergere care acceptă un parametru de $ id care ar trebui să fie de tipul de date INT.
acum că am terminat cu clasa de model părinte, să creăm modelele noastre Pals
Creați un fișier nou în application / models / Pals.php
Adăugați următorul cod
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();}}
AICI,
- clasa Pals extinde BaseModel {…} extinde modelul părinte BaseModel și face automat toate metodele definite în BaseModel accesate la clasa copil.
- protejat $ tabel = 'prieteni'; definește numele tabelului asociat modelului nostru părinte
- __construct () {…} inițializează constructorul părinte
- funcția publică get_by_id ($ id) {...} suprascrie get_by_id pentru a oferi implementare personalizată specifică modelului Pals. Interogarea pentru get_by_id folosește un join pentru a extrage numele orașului din tabelul orașelor
- funcția publică get_all () {...} suprascrie metoda get_all pentru a implementa o interogare de asociere între prietenii și tabela orașelor
Creați un fișier nou în application / models / Cities.php
AICI,
- protejat $ tabel = 'orase'; definește tabelul bazei de date model.
După cum puteți vedea din codul de mai sus, Moștenirea ne economisește foarte mult timp atunci când lucrăm cu modele în CodeIgniter. În secțiunea următoare, vom învăța
Controlere Manager de contacte
Acum, că am creat modelele, să creăm controlere pentru aplicația noastră. Vom avea două controlere și anume Contacte și orașe
Să începem cu orașele
Creați un nou fișier Cities.php în directorul de aplicații / controlere
Adăugați următorul cod
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'));}}
AICI,
- Codul de mai sus implementează toate metodele necesare pentru a crea, actualiza, șterge și citi rânduri din baza de date.
Creați un alt fișier Contacts.php în aplicație / controlere
Adăugați următorul cod
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'));}}
Vizualizări Manager de contacte
Ne-am uitat deja la formulare și validare în CodeIgniter în tutorialele anterioare. Vom folosi codul pe care l-am dezvoltat în tutorialele anterioare. Pentru completitudine, vom reproduce codul pe care l-am creat în tutorialele anterioare.
Opiniile aplicației noastre vor fi după cum urmează
Puteți descărca codul pentru vizualizările de mai sus făcând clic pe linkul de mai jos
Descărcare vizualizări Manager CodeIgniter Contacts
rezumat
În acest tutorial, veți afla cum să creați modele în CodeIgniter. Am profitat de moștenire în programarea orientată pe obiecte pentru a promova reutilizarea codului prin crearea unui model de bază care implementează cele patru operațiuni majore ale bazei de date de inserare, citire, actualizare și ștergere.
Am demonstrat conceptele folosind o aplicație practică și vom continua să facem acest lucru în următoarele tutoriale adăugând mai multe funcționalități aplicației.