CodeIgniter Arbeide med database
I forrige opplæring har vi dekket det grunnleggende om CodeIgniter aktiv post og hvordan du setter inn, oppdaterer, sletter og leser poster fra databasen. I denne opplæringen vil vi lage databasemodeller og bruke skjemaer for å opprette og oppdatere databaseposter. Hvis du er helt ny med å jobbe med databaser i CodeIgniter, anbefales det at du leser forrige opplæring
Databasekonfigurasjon
Vi starter med å lage opplæringsprosjektdatabasen. Vi vil lage en enkel database for å administrere kontaktdetaljer. Vi vil lage en enkel database med to (2) tabeller navn på venner og byer de bor i. Forholdet mellom venner og byer er en-til-en med id i byer som primærnøkkel og city_id som fremmednøkkel i vennetabeller .
Kjør følgende skript for å opprette 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 vil nå lage modeller for databasen vår. Modellen er M-delen av MVC. Modellen omhandler datatilgang, manipulering av data og forretningslogikk.
I CodeIgniter må hver modell definere metodene den vil støtte. I stedet for å gjenta den samme koden i hver modell, vil vi dra nytte av arv i objektorientert programmering og lage en overordnet modellklasse som vil definere de grunnleggende metodene som vi ønsker at modellene våre skal støtte.
Tabellen nedenfor viser metodene vi skal definere og hvordan data blir tilgjengelig.
S / N | Metode | Beskrivelse |
1 | __konstruere | Definerer konstruktormetoden som kaller metoden foreldrekonstruktør |
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 hovednøkkelen av INT-typen som heter id |
4 | get_where | Henter alle felt fra databasen basert på kriteriene |
5 | sett inn | Setter inn en ny post i databasen |
6 | Oppdater | Oppdaterer en eksisterende databaseoppføring basert på primærnøkkelen av INT-typen som heter id |
7 | slett | Sletter en eksisterende post fra databasen basert på primærnøkkelen til INT-typen som heter id |
Følgende bilde viser klassediagrammet og hvordan Pals and Cities barnemodeller forholder seg til foreldremodellen BaseModel.
Vi vil lage to modeller som beskrevet i bildet ovenfor
Opprett en ny klasse BaseModel i applikasjon / modeller / BaseModel.php
Legg til følgende kode
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,
- beskyttet $ table = ''; definerer en beskyttet variabel med navnet tabell. Dette vil bli fylt av den respektive barneklassen for å spesifisere hvilken tabell våre basismodellklassemetoder skal samhandle med.
- offentlig funksjon __construct () {...} definerer konstruktormetoden og utfører konstruktormetoden til overordnet klasse CI_Model.
- get_all () {…} bruker databasebiblioteket og verdien av variabelen $ til å kjøre SELECT-spørringen mot databasen vår.
- get_by_id ($ id) {...} definerer metoden for å hente en enkelt rad fra databasen og godtar en parameter $ id som skal være av INT-datatype.
- get_where ($ hvor) {...} definerer get-metoden som lar deg sette en hvor-ledd.
- insert ($ data) {…} definerer innsettingsmetoden og aksepterer arrayparameteren $ data som inneholder verdiene som skal skrives til databasen.
- oppdatering ($ id, $ data) {...} definerer oppdateringsmetoden og aksepterer arrayparameteren $ data som inneholder verdiene som skal oppdateres i databasen.
- delete ($ id) {…} definerer slettemetoden som godtar en parameter på $ id som skal være av datatypen INT.
nå som vi er ferdige med foreldremodellklassen, kan vi lage våre Pals-modeller
Opprett en ny fil i applikasjon / modeller / Pals.php
Legg til følgende kode
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,
- class Pals utvider BaseModel {…} utvider foreldremodellen BaseModel og får automatisk tilgang til alle metodene som er definert i BaseModel til barneklassen.
- beskyttet $ table = 'pals'; definerer tabellnavnet som er knyttet til vår foreldremodell
- __construct () {...} initialiserer foreldrekonstruktøren
- offentlig funksjon get_by_id ($ id) {...} overstyrer get_by_id for å gi tilpasset implementering som er spesifikk for Pals-modellen. Spørsmålet for get_by_id bruker en join for å hente bynavnet fra bytabellen
- offentlig funksjon get_all () {...} overstyrer get_all-metoden for å implementere et sammenføyningsspørsmål mellom vennene og bytabellen
Opprett en ny fil i applikasjon / modeller / Cities.php
HER,
- beskyttet $ table = 'byer'; definerer modelldatabasetabellen.
Som du kan se fra ovennevnte kode, sparer Arv oss mye tid når vi jobber med modeller i CodeIgniter. I neste avsnitt vil vi lære
Kontakter Manager-kontrollere
Nå som vi har laget modellene, la oss lage kontrollerne for applikasjonen vår. Vi vil ha to kontrollere, nemlig kontakter og byer
La oss starte med byer
Opprett en ny fil Cities.php i applikasjons- / kontrollere-katalogen
Legg til følgende kode
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,
- Ovennevnte kode implementerer alle metodene som trengs for å opprette, oppdatere, slette og lese rader fra databasen.
Opprett en ny fil Kontakter.php i applikasjon / kontrollere
Legg til følgende kode
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-visninger
Vi har allerede sett på skjemaer og validering i CodeIgniter i forrige veiledning. Vi vil bruke koden som vi utviklet i forrige veiledning. For fullstendighetens skyld vil vi reprodusere koden vi opprettet i de foregående opplæringene.
Synspunktene til søknaden vår vil være som følger
Du kan laste ned koden for ovennevnte visninger ved å klikke på lenken nedenfor
CodeIgniter Kontakter Manager Visninger Last ned
Sammendrag
I denne opplæringen lærer du hvordan du lager modeller i CodeIgniter. Vi benyttet arv i objektorientert programmering for å fremme gjenbrukbarhet ved å lage en basismodell som implementerer de fire viktigste databasearbeidene ved å sette inn, lese, oppdatere og slette.
Vi har demonstrert konseptene ved hjelp av en praktisk applikasjon, og vi vil fortsette å gjøre det i de neste opplæringene ved å legge til mer funksjonalitet i applikasjonen.