CodeIgniter Database: Konfiguration, Rediger, Opdater, Slet data
Codeigniter-database
I den forrige tutorial har vi dækket det grundlæggende i CodeIgniter active record og hvordan man indsætter, opdaterer, sletter og læser poster fra databasen. I denne øvelse vil vi oprette databasemodeller og bruge formularer til at oprette og opdatere databaseposter. hvis du er helt ny til at arbejde med databaser i CodeIgniter, så rådede du til at læse den forrige tutorial
Codeigniter-databasekonfiguration
Vi starter med at oprette tutorial-projektdatabasen. Vi opretter en simpel database til håndtering af kontaktoplysninger. Vi vil oprette en simpel database med to (2) tabeller med navne på venner og byer, som de bor i. Forholdet mellem venner og byer er en-til-en med id i byer som primærnøgle og city_id som fremmednøgle i pals-tabeller .
Kør følgende scripts for at oprette 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`) );
Lad os nu oprette bytabellen
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
CodeIgniter-databasemodeller
Vi vil nu lave modeller til vores database. Modellen er M-delen af MVC. Modellen omhandler dataadgang, datamanipulation og forretningslogik.
I CodeIgniter skal hver model definere de metoder, den vil understøtte. I stedet for at gentage den samme kode i hver model, vil vi drage fordel af arv i objektorienteret programmering og skabe en overordnet modelklasse, der vil definere de grundlæggende metoder, som vi ønsker, at vores modeller skal understøtte.
Tabellen nedenfor viser de metoder, vi vil definere, og hvordan der vil blive tilgået data.
S / N | Metode | Description |
---|---|---|
1 | __konstruere | Definerer konstruktørmetoden, der kalder den overordnede konstruktørmetode |
2 | få_alt | Henter alle felter og poster fra databasen uden betingelser |
3 | get_by_id | Henter en enkelt række fra databasen ved hjælp af den primære nøgle af INT-typen med navnet id |
4 | get_where | Henter alle felter fra databasen baseret på de baseret i kriterier |
5 | INSERT | Indsætter en ny post i databasen |
6 | opdatering | Opdaterer en eksisterende databasepost baseret på den primære nøgle af INT-typen med navnet id |
7 | slette | Sletter en eksisterende post fra databasen baseret på den primære nøgle af INT-typen med navnet id |
Følgende billede viser klassediagrammet, og hvordan Pals og Cities underordnede modeller relaterer sig til den overordnede model BaseModel.
Vi vil skabe to modeller som beskrevet i ovenstående billede
Opret en ny klasse BaseModel i application/models/BaseModel.php
Tilføj 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,
- beskyttet $table = ”; definerer en beskyttet variabel med navnet tabel. Dette vil blive udfyldt af den respektive underordnede klasse for at angive, hvilken tabel vores basismodelklassemetoder skal interagere med.
- public funktion __construct() {...} definerer konstruktormetoden og udfører konstruktormetoden for den overordnede klasse CI_Model.
- get_all() {...} bruger databasebiblioteket og værdien af variablen $table til at køre SELECT-forespørgslen mod vores database.
- get_by_id($id) {...} definerer metoden til at hente en enkelt række fra databasen og accepterer en parameter $id, der skal være af INT-datatypen.
- get_where($where) {...} definerer get-metoden, der tillader dig at sætte en where-klausul.
- insert($data) {…} definerer insert-metoden og accepterer array-parameteren $data, der indeholder de værdier, der skal skrives til databasen.
- update($id, $data) {...} definerer opdateringsmetoden og accepterer array-parameteren $data, der indeholder de værdier, der skal opdateres i databasen.
- delete($id) {...} definerer slettemetoden, der accepterer en parameter af $id, der skal være af datatypen INT.
nu hvor vi er færdige med den overordnede modelklasse, lad os skabe vores Pals-modeller
Opret en ny fil i application/models/Pals.php
Tilføj 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 udvider BaseModel {...} udvider den overordnede model BaseModel og gør automatisk alle de metoder, der er defineret i BaseModel, tilgået til den underordnede klasse.
- beskyttet $table = 'venner'; definerer tabelnavnet forbundet med vores overordnede model
- __construct() {...} initialiserer den overordnede konstruktør
- offentlig funktion get_by_id($id) {...} tilsidesætter get_by_id for at give tilpasset implementering, der er specifik for Pals-modellen. Forespørgslen til get_by_id bruger en join til at hente bynavnet fra bytabellen
- offentlig funktion get_all() {...} tilsidesætter get_all-metoden til at implementere en joinforespørgsel mellem pals og by-tabellen
Opret en ny fil i application/models/Cities.php
<?php class Cities extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
HER,
beskyttet $table = 'byer'; definerer modeldatabasetabellen.
Som du kan se af den ovenfor givne kode, sparer Arv os for en masse tid, når vi arbejder med modeller i CodeIgniter. I næste afsnit lærer vi
Kontakter Manager-controllere
Nu hvor vi har skabt modellerne, lad os skabe controllerne til vores applikation. Vi vil have to controllere, nemlig kontakter og byer
Lad os starte med byer
Opret en ny fil Cities.php i application/controllers bibliotek
Tilføj 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,
Ovenstående kode implementerer alle de metoder, der er nødvendige for at oprette, opdatere, slette og læse rækker fra databasen.
Opret endnu en fil Contacts.php i applikation/controllere
Tilføj 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')); } }
Kontaktadministratorvisninger
Vi har allerede set på formularer og validering i CodeIgniter i de tidligere tutorials. Vi vil bruge den kode, som vi udviklede i de tidligere tutorials. For fuldstændighedens skyld vil vi gengive den kode, vi oprettede i de tidligere tutorials.
Synspunkterne i vores ansøgning vil være som følger
Du kan downloade koden til ovenstående visninger ved at klikke på linket nedenfor
CodeIgniter Contacts Manager Views Download
Resumé
I denne tutorial lærer du, hvordan du opretter modeller i CodeIgniter. Vi udnyttede arv i objektorienteret programmering til at fremme genanvendelighed af kode ved at skabe en basismodel, der implementerer de fire store databaseoperationer med indsættelse, læsning, opdatering og sletning.
Vi har demonstreret koncepterne ved hjælp af en praktisk applikation, og det vil vi fortsætte med i de næste tutorials ved at tilføje mere funktionalitet til applikationen.