CodeIgniter-database: Konfigurer, oppdater og slett data
⚡ Smart oppsummering
CodeIgniter Database bygger modeller og kontrollere for en kontaktbehandler støttet av MySQLEn delt BaseModel implementerer innsetting, lesing, oppdatering og sletting, og undermodellene Pals og Cities arver den, slik at kontrollere gjenbruker de samme databaseoperasjonene på tvers av applikasjonen.
CodeIgniter-database
I den forrige veiledningen dekket vi det grunnleggende om CodeIgniter Active Record og hvordan du setter inn, oppdaterer, sletter og leser poster fra databasen. I denne veiledningen skal vi lage databasemodeller og bruke skjemaer for å opprette og oppdatere databaseposter. Hvis du er helt nybegynner innen databasearbeid. CodeTennapparat, anbefales det å lese tidligere opplæring først.
CodeKonfigurasjon av Igniter-databasen
Vi starter med å opprette databasen for veiledningen. Vi oppretter en enkel database for å administrere kontaktinformasjon, med to tabeller kalt pals og byene de bor i. Forholdet mellom pals og cities er én-til-én, med id i cities som primærnøkkel og city_id som fremmednøkkel i pals-tabellen.
Kjør følgende skript for å lage 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`) );
La oss nå lage bytabellen:
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeIgniter-databasemodeller
Vi skal nå lage modeller for databasen vår. Modellen er M-delen av MVC. Modellen omhandler datatilgang, datamanipulering og forretningslogikk.
In CodeIgniter, hver modell må definere metodene den skal støtte. I stedet for å gjenta den samme koden i hver modell, vil vi dra nytte av arv i objektorientert programmering og opprette en overordnet modellklasse som definerer de grunnleggende metodene vi ønsker at modellene våre skal støtte.
Tabellen nedenfor viser metodene som vi vil definere og hvordan data vil få tilgang.
| S / N | Metode | Tekniske beskrivelser |
|---|---|---|
| 1 | __konstruere | Definerer konstruktørmetoden som kaller den overordnede konstruktørmetoden. |
| 2 | få_alt | Henter alle feltene og postene fra databasen uten noen betingelser. |
| 3 | get_by_id | Henter en enkelt rad fra databasen ved hjelp av primærnøkkelen av typen INT med navnet id. |
| 4 | komme_hvor | Henter alle felt fra databasen basert på de gitte kriteriene. |
| 5 | Sett | Setter inn en ny post i databasen. |
| 6 | Oppdater | Oppdaterer en eksisterende databasepost basert på primærnøkkelen av INT-typen med navnet id. |
| 7 | slette | Sletter en eksisterende post fra databasen basert på primærnøkkelen av INT-typen med navnet id. |
Følgende bilde viser klassediagrammet og hvordan barnemodellene Pals og Cities forholder seg til den overordnede modellen BaseModel.
Vi skal lage to modeller som beskrevet i bildet ovenfor. Opprett en ny klasse BaseModel i application/models/BaseModel.php og legg til følgende kode:
<?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); } }
Her:
- protected $table = ”; definerer en beskyttet variabel kalt tabell. Denne fylles ut av den respektive barneklassen for å spesifisere hvilken tabell basismodellmetodene skal samhandle med.
- public function __construct() {…} definerer konstruktøren og kjører konstruktøren til den overordnede klassen CI_Model.
- get_all() {…} bruker databasebiblioteket og verdien til $table til å kjøre SELECT-spørringen.
- get_by_id($id) {…} henter en enkelt rad og godtar en parameter $id av INT-datatypen.
- get_where($where) {…} definerer en get-metode som lar deg sette en where-klausul.
- insert($data) {…} godtar arrayparameteren $data som inneholder verdiene som skal skrives til databasen.
- update($id, $data) {…} godtar arrayparameteren $data som inneholder verdiene som skal oppdateres.
- delete($id) {…} aksepterer en parameter $id av INT-datatypen.
Nå som vi er ferdige med den overordnede modellklassen, la oss lage Pals-modellen vår. Opprett en ny fil i application/models/Pals_model.php og legg til følgende kode:
<?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(); } }
Her:
- klasse Pals_model extends BaseModel {…} utvider foreldremodellen BaseModel og gjør automatisk alle metodene tilgjengelige for barneklassen.
- protected $table = 'pals'; definerer tabellnavnet som er knyttet til denne modellen.
- __construct() {…} initialiserer den overordnede konstruktøren.
- public function get_by_id($id) {…} overstyrer get_by_id for å gi en tilpasset implementering. Spørringen bruker en kobling for å hente bynavnet fra bytabellen.
- public function get_all() {…} overstyrer get_all for å implementere en join-spørring mellom pals- og cities-tabellene.
Opprett en ny fil i application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Her:
- beskyttet $table = 'byer'; definerer modelldatabasetabellen.
Som du kan se, sparer arv oss mye tid når vi jobber med modeller i CodeTennapparat.
Kontaktadministratorkontrollere
Nå som vi har laget modellene, la oss lage kontrollerne for applikasjonen vår. Vi vil ha to kontrollere, Cities og Contacts. La oss starte med Cities. Opprett en ny fil Cities.php i mappen application/controllers og legg til følgende kode:
<?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')); } }
Her:
- Koden ovenfor implementerer alle metodene som trengs for å opprette, oppdatere, slette og lese rader fra databasen.
Opprett en annen fil, Contacts.php, i application/controllers og legg til følgende kode:
<?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')); } }
Visninger for kontaktbehandler
Vi har allerede sett på skjemaer og validering i CodeIgniter i de forrige veiledningene, og vi vil bruke koden vi utviklet der. For fullstendighetens skyld vil visningene av applikasjonen vår se slik ut:
Du kan laste ned koden for visningene ved å klikke på lenken nedenfor:
CodeLast ned Igniter Contacts Manager-visninger



