CodeIgniter Database: Konfiguration, Redigera, Uppdatera, Ta bort data
Codeigniter-databas
I den tidigare handledningen har vi täckt grunderna i CodeIgniter Active Record och hur man infogar, uppdaterar, tar bort och läser poster från databasen. I den här handledningen kommer vi att skapa databasmodeller och använda formulär för att skapa och uppdatera databasposter. om du är helt ny på att arbeta med databaser i CodeIgniter, rekommenderade du att läsa den tidigare handledningen
Codeigniter-databaskonfiguration
Vi börjar med att skapa tutorialprojektdatabasen. Vi kommer att skapa en enkel databas för att hantera kontaktuppgifter. Vi kommer att skapa en enkel databas med två (2) tabeller med namn på vänner och städer som de bor i. Förhållandet mellan vänner och städer är en-till-en med id i städer som primärnyckel och city_id som främmande nyckel i pals-tabeller .
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 städtabellen
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 behandlar dataåtkomst, datamanipulation och affärslogik.
I CodeIgniter måste varje modell definiera de metoder som den kommer att stödja. Istället för att upprepa samma kod i varje modell kommer vi att dra fördel av arv i objektorienterad programmering och skapa en överordnad modellklass som kommer att definiera 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 att nås.
S / N | Metod | Description |
---|---|---|
1 | __konstruera | Definierar konstruktormetoden som anropar den överordnade 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 hjälp av primärnyckeln av INT-typ med namnet id |
4 | komma_vart | Hämtar alla fält från databasen baserat på baserat i kriterier |
5 | infoga | Infogar en ny post i databasen |
6 | uppdatering | Uppdaterar en befintlig databaspost baserat på primärnyckeln av INT-typ med namnet id |
7 | radera | Tar bort en befintlig post från databasen baserat på primärnyckeln av INT-typ med namnet id |
Följande bild visar klassdiagrammet och hur underordnade modeller för Pals och Cities relaterar till den överordnade modellen BaseModel.
Vi kommer att skapa två modeller som beskrivs i bilden ovan
Skapa en ny klass BaseModel i application/models/BaseModel.php
Lägg till följande 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); } }
HÄR,
- skyddad $table = ”; definierar en skyddad variabel med namnet tabell. Detta kommer att fyllas i av respektive barnklass för att specificera vilken tabell våra basmodellklassmetoder ska interagera med.
- public funktion __construct() {...} definierar konstruktormetoden och exekverar konstruktormetoden för den överordnade klassen CI_Model.
- get_all() {...} använder databasbiblioteket och värdet på variabeln $table för att köra SELECT-frågan mot vår databas.
- get_by_id($id) {...} definierar metoden för att hämta en enstaka rad från databasen och accepterar en parameter $id som ska vara av INT-datatyp.
- get_where($where) {...} definierar get-metoden som låter dig ställa in en where-sats.
- insert($data) {...} definierar insertmetoden och accepterar arrayparametern $data som innehåller värdena som ska skrivas till databasen.
- update($id, $data) {...} definierar uppdateringsmetoden och accepterar arrayparametern $data som innehåller värdena som ska uppdateras i databasen.
- delete($id) {...} definierar raderingsmetoden som accepterar en parameter av $id som ska vara av datatyp INT.
Nu när vi är klara med den överordnade modellklassen, låt oss skapa våra Pals-modeller
Skapa en ny fil i application/models/Pals.php
Lägg till följande 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(); } }
HÄR,
- class Pals utökar BaseModel {…} utökar den överordnade modellen BaseModel och gör automatiskt alla metoder som definieras i BaseModel åtkomst till den underordnade klassen.
- skyddad $table = 'kompisar'; definierar tabellnamnet som är associerat med vår överordnade modell
- __construct() {...} initierar den överordnade konstruktorn
- offentlig funktion get_by_id($id) {...} åsidosätter get_by_id för att tillhandahålla anpassad implementering specifik för Pals-modellen. Frågan för get_by_id använder en join för att hämta stadsnamnet från stadstabellen
- public funktion get_all() {...} åsidosätter get_all-metoden för att implementera en kopplingsfråga mellan pals och stadstabeller
Skapa en ny fil i application/models/Cities.php
<?php class Cities extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
HÄR,
skyddad $table = 'städer'; definierar modellens databastabell.
Som du kan se av 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 Controllers
Nu när vi har skapat modellerna, låt oss skapa kontrollerna för vår applikation. Vi kommer att ha två kontroller, nämligen kontakter och städer
Låt oss börja med städer
Skapa en ny fil Cities.php i application/controllers-katalogen
Lägg till följande 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')); } }
HÄR,
Ovanstående kod implementerar alla metoder som behövs för att skapa, uppdatera, ta bort och läsa rader från databasen.
Skapa ytterligare en fil Contacts.php i program/kontroller
Lägg till följande 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')); } }
Kontakthanterarens vyer
Vi har redan tittat på formulär och validering i CodeIgniter i de tidigare handledningarna. Vi kommer att använda koden som vi utvecklade i de tidigare handledningarna. För fullständighetens skull kommer vi att återskapa koden vi skapade i de tidigare handledningarna.
Synpunkterna på 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 Contacts Manager Views Ladda ner
Sammanfattning
I den här handledningen kommer du att lära dig hur du skapar modeller i CodeIgniter. Vi drog fördel av arv i objektorienterad programmering för att främja kodåteranvändbarhet genom att skapa en basmodell som implementerar de fyra stora databasoperationerna att infoga, läsa, uppdatera och ta bort.
Vi har demonstrerat koncepten med hjälp av en praktisk applikation, och vi kommer att fortsätta att göra det i nästa handledning genom att lägga till mer funktionalitet till applikationen.