CodeIgniter baza podataka: konfiguracija, uređivanje, ažuriranje, brisanje podataka
Baza podataka Codeigniter
U prethodnom vodiču pokrili smo osnove CodeIgniter aktivnog zapisa i kako umetati, ažurirati, brisati i čitati zapise iz baze podataka. U ovom ćemo vodiču izraditi modele baze podataka i koristiti obrasce za stvaranje i ažuriranje zapisa baze podataka. ako ste potpuno novi u radu s bazama podataka u CodeIgniteru, savjetujemo vam da pročitate prethodni vodič
Konfiguracija baze podataka Codeigniter
Počet ćemo s izradom baze podataka projekta tutorijala. Napravit ćemo jednostavnu bazu podataka za upravljanje kontakt podacima. Napravit ćemo jednostavnu bazu podataka s dvije (2) tablice imena prijatelja i gradova u kojima žive. Odnos između prijatelja i gradova je jedan-na-jedan s id-om u gradovima kao primarnim ključem i city_id kao stranim ključem u tablicama prijatelja .
Pokrenite sljedeće skripte za izradu baze podataka:
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`) );
Kreirajmo sada tablicu gradova
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
CodeIgniter modeli baze podataka
Sada ćemo izraditi modele za našu bazu podataka. Model je M dio VMC. Model se bavi pristupom podacima, manipulacijom podacima i poslovnom logikom.
U CodeIgniteru svaki model mora definirati metode koje će podržavati. Umjesto ponavljanja istog koda u svakom modelu, iskoristit ćemo prednost nasljeđivanja u objektno orijentiranom programiranju i stvoriti roditeljsku klasu modela koja će definirati osnovne metode za koje želimo da naši modeli podržavaju.
Tablica u nastavku prikazuje metode koje ćemo definirati i kako će se pristupiti podacima.
S / N | način | Description |
---|---|---|
1 | __konstruirati | Definira metodu konstruktora koja poziva roditeljsku metodu konstruktora |
2 | dobiti_sve | Dohvaća sva polja i zapise iz baze podataka bez ikakvih uvjeta |
3 | get_by_id | Dohvaća jedan redak iz baze podataka pomoću primarnog ključa tipa INT pod nazivom id |
4 | dobiti_gdje | Dohvaća sva polja iz baze podataka na temelju kriterija |
5 | INSERT | Umeće novi zapis u bazu podataka |
6 | ažuriranje | Ažurira postojeći zapis baze podataka na temelju primarnog ključa tipa INT pod nazivom id |
7 | izbrisati | Briše postojeći zapis iz baze podataka na temelju primarnog ključa tipa INT pod nazivom id |
Sljedeća slika prikazuje dijagram klasa i kako su podređeni modeli Pals i Cities povezani s nadređenim modelom BaseModel.
Napravit ćemo dva modela kao što je opisano na gornjoj slici
Napravite novu klasu BaseModel u aplikaciji/modeli/BaseModel.php
Dodajte sljedeći kod
<?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); } }
OVDJE,
- zaštićena $tablica = ”; definira zaštićenu varijablu pod nazivom table. Ovo će biti popunjeno odgovarajućom podređenom klasom kako bi se odredilo s kojom tablicom naše metode klase osnovnog modela trebaju komunicirati.
- javna funkcija __construct() {…} definira metodu konstruktora i izvršava metodu konstruktora nadređene klase CI_Model.
- get_all() {…} koristi biblioteku baze podataka i vrijednost varijable $table za pokretanje SELECT upita prema našoj bazi podataka.
- get_by_id($id) {…} definira metodu za dohvaćanje jednog retka iz baze podataka i prihvaća parametar $id koji bi trebao biti tipa podataka INT.
- get_where($where) {…} definira metodu get koja vam omogućuje da postavite klauzulu where.
- insert($data) {…} definira metodu umetanja i prihvaća parametar polja $data koji sadrži vrijednosti koje treba zapisati u bazu podataka.
- update($id, $data) {…} definira metodu ažuriranja i prihvaća parametar polja $data koji sadrži vrijednosti koje treba ažurirati u bazi podataka.
- delete($id) {…} definira metodu brisanja koja prihvaća parametar $id koji bi trebao biti tipa podataka INT.
sada kada smo završili s roditeljskom klasom modela, kreirajmo naše Pals modele
Napravite novu datoteku u aplikaciji/modeli/Pals.php
Dodajte sljedeći kod
<?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(); } }
OVDJE,
- klasa Pals extends BaseModel {…} proširuje nadređeni model BaseModel i automatski omogućuje pristup svim metodama definiranim u BaseModelu klasi podređenoj.
- zaštićena $tablica = 'prijatelji'; definira naziv tablice povezan s našim roditeljskim modelom
- __construct() {…} inicijalizira nadređeni konstruktor
- javna funkcija get_by_id($id) {…} nadjačava get_by_id kako bi pružila prilagođenu implementaciju specifičnu za Pals model. Upit za get_by_id koristi spoj za dohvaćanje imena grada iz tablice gradova
- javna funkcija get_all() {…} nadjačava metodu get_all za implementaciju upita za spajanje između prijatelja i tablice gradova
Napravite novu datoteku u aplikaciji/modeli/Gradovi.php
<?php class Cities extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
OVDJE,
zaštićena $tablica = 'gradovi'; definira tablicu baze podataka modela.
Kao što možete vidjeti iz gore navedenog koda, Inheritance nam štedi mnogo vremena kada radimo s modelima u CodeIgniteru. U sljedećem odjeljku naučit ćemo
Kontroleri upravitelja kontakata
Sada kada smo izradili modele, kreirajmo kontrolere za našu aplikaciju. Imat ćemo dva kontrolera, naime kontakte i gradove
Počnimo s gradovima
Napravite novu datoteku Cities.php u direktoriju application/controllers
Dodajte sljedeći kod
<?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')); } }
OVDJE,
Gornji kod implementira sve metode potrebne za stvaranje, ažuriranje, brisanje i čitanje redaka iz baze podataka.
Napravite drugu datoteku Contacts.php u aplikaciji/kontrolorima
Dodajte sljedeći kod
<?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')); } }
Prikazi upravitelja kontakata
Već smo pogledali obrasce i provjeru valjanosti u CodeIgniteru u prethodnim tutorijalima. Koristit ćemo kod koji smo razvili u prethodnim tutorijalima. Radi cjelovitosti, reproducirati ćemo kôd koji smo izradili u prethodnim vodičima.
Prikazi naše aplikacije bit će sljedeći
Kôd za gornje prikaze možete preuzeti klikom na vezu u nastavku
CodeIgniter Contacts Manager Views Preuzimanje
rezime
U ovom vodiču naučit ćete kako izraditi modele u CodeIgniter. Iskoristili smo prednost nasljeđivanja u objektno orijentiranom programiranju za promicanje ponovne upotrebe koda stvaranjem osnovnog modela koji implementira četiri glavne operacije baze podataka umetanje, čitanje, ažuriranje i brisanje.
Demonstrirali smo koncepte pomoću praktične aplikacije, a nastavit ćemo to činiti u sljedećim uputama dodavanjem više funkcionalnosti aplikaciji.