CodeIgniter Arbeta med databas
I föregående handledning har vi täckt grunderna i CodeIgniter aktiv post och hur man infogar, uppdaterar, tar bort och läser poster från databasen. I denna handledning skapar vi databasmodeller och använder formulär för att skapa och uppdatera databasposter. om du är helt ny på att arbeta med databaser i CodeIgniter, rekommenderar vi att du läser den tidigare självstudien
Databaskonfiguration
Vi börjar med att skapa handledningsprojektdatabasen. Vi skapar en enkel databas för hantering av kontaktuppgifter. Vi kommer att skapa en enkel databas med två (2) tabeller namn på kompisar och städer som de bor i. Förhållandet mellan kompisar och städer är en-mot-en med id i städer som primärnyckel och city_id som främmande nyckel i kompattabeller .
Kör följande skript för att skapa databasen:
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`));
Låt oss nu skapa stadstabellen
CREATE TABLE `cities` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(245) DEFAULT NULL,PRIMARY KEY (`id`)) ;
CodeIgniter databasmodeller
Vi kommer nu att skapa modeller för vår databas. Modellen är M-delen av MVC. Modellen handlar om datatillgång, datamanipulation och affärslogik.
I CodeIgniter måste varje modell definiera de metoder som den stöder. Istället för att upprepa samma kod i varje modell kommer vi att dra nytta av arv i objektorienterad programmering och skapa en överordnad modellklass som definierar de grundläggande metoderna som vi vill att våra modeller ska stödja.
Tabellen nedan visar de metoder som vi kommer att definiera och hur data kommer åt.
S / N | Metod | Beskrivning |
1 | __konstruera | Definierar konstruktormetoden som anropar den moderna konstruktormetoden |
2 | få alla | Hämtar alla fält och poster från databasen utan några villkor |
3 | get_by_id | Hämtar en enda rad från databasen med den primära nyckeln av INT-typ med namnet id |
4 | get_where | Hämtar alla fält från databasen baserat på kriterierna |
5 | Föra in | Infogar en ny post i databasen |
6 | uppdatering | Uppdaterar en befintlig databaspost baserat på den primära nyckeln av INT-typen med namnet id |
7 | radera | Tar bort en befintlig post från databasen baserat på den primära nyckeln av INT-typ med namnet id |
Följande bild visar klassdiagrammet och hur Pals and Cities underordnade modeller relaterar till modermodellen BaseModel.
Vi kommer att skapa två modeller som beskrivs i bilden ovan
Skapa en ny klass BaseModel i applikation / modeller / BaseModel.php
Lägg till följande kod
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);}}
HÄR,
- skyddad $ table = ''; definierar en skyddad variabel med namnet tabell. Detta kommer att fyllas i respektive underklass för att specificera vilken tabell våra basmodell klassmetoder ska interagera med.
- offentlig funktion __construct () {...} definierar konstruktormetoden och kör konstruktormetoden i överordnad klass CI_Model.
- get_all () {...} använder databasbiblioteket och värdet på variabeln $ $ för att köra SELECT-frågan mot vår databas.
- get_by_id ($ id) {...} definierar metoden för att hämta en enda rad från databasen och accepterar en parameter $ id som ska vara av INT-datatyp.
- get_where ($ där) {...} definierar get-metoden som låter dig ställa in en var-sats.
- infoga ($ data) {...} definierar infogningsmetoden och accepterar arrayparametern $ data som innehåller de värden som ska skrivas till databasen.
- uppdatering ($ id, $ data) {...} definierar uppdateringsmetoden och accepterar arrayparametern $ data som innehåller värdena som ska uppdateras i databasen.
- delete ($ id) {…} definierar borttagningsmetoden som accepterar en parameter på $ id som ska vara av datatyp INT.
nu när vi är klara med modermodellklassen kan vi skapa våra Pals-modeller
Skapa en ny fil i applikationen / modeller / Pals.php
Lägg till följande kod
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();}}
HÄR,
- klass Pals utökar BaseModel {...} utökar modermodellen BaseModel och gör automatiskt tillgång till alla metoder som definierats i BaseModel till underklassen.
- skyddad $ table = 'kompisar'; definierar tabellnamnet som är kopplat till vår överordnade modell
- __construct () {...} initialiserar den överordnade konstruktören
- offentlig funktion get_by_id ($ id) {...} åsidosätter get_by_id för att tillhandahålla anpassad implementering som är specifik för Pals-modellen. Frågan för get_by_id använder en join för att hämta stadsnamnet från städerna
- public function get_all () {...} åsidosätter get_all-metoden för att implementera en kopplingsfråga mellan kompisar och städer
Skapa en ny fil i applikationen / modeller / Cities.php
HÄR,
- skyddad $ table = 'städer'; definierar modelldatabasstabellen.
Som du kan se från ovanstående kod sparar Arv oss mycket tid när vi arbetar med modeller i CodeIgniter. I nästa avsnitt kommer vi att lära oss
Kontakter Manager-kontroller
Nu när vi har skapat modellerna ska vi skapa kontroller för vår applikation. Vi kommer att ha två styrenheter, nämligen kontakter och städer
Låt oss börja med städer
Skapa en ny fil Cities.php i katalogen applikation / styrenhet
Lägg till följande kod
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'));}}
HÄR,
- Ovanstående kod implementerar alla metodbehov för att skapa, uppdatera, ta bort och läsa rader från databasen.
Skapa en annan fil Kontakter.php i applikation / styrenheter
Lägg till följande kod
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'));}}
Kontakter Manager vyer
Vi har redan tittat på formulär och validering i CodeIgniter i de tidigare självstudierna. Vi kommer att använda koden som vi utvecklade i föregående handledning. För fullständighetens skull kommer vi att reproducera koden som vi skapade i de tidigare självstudierna.
Synpunkterna i vår ansökan kommer att vara följande
Du kan ladda ner koden för ovanstående vyer genom att klicka på länken nedan
CodeIgniter Kontakter Manager Visningar Ladda ner
Sammanfattning
I den här självstudien lär du dig hur du skapar modeller i CodeIgniter. Vi utnyttjade arv i objektorienterad programmering för att främja återanvändbar kod genom att skapa en basmodell som implementerar de fyra viktigaste databasåtgärderna för att infoga, läsa, uppdatera och radera.
Vi har demonstrerat koncepten med en praktisk tillämpning och vi kommer att fortsätta göra det i nästa handledning genom att lägga till mer funktionalitet i applikationen.