CodeIgniter-database: gegevens configureren, bijwerken en verwijderen
โก Slimme samenvatting
CodeIgniter Database bouwt modellen en controllers voor een contactbeheerder die wordt ondersteund door MySQLEen gedeeld BaseModel implementeert invoegen, lezen, bijwerken en verwijderen, en de submodellen Pals en Cities erven hiervan, zodat controllers dezelfde databasebewerkingen in de hele applicatie hergebruiken.

CodeIgniter-database
In de vorige tutorial hebben we de basisprincipes behandeld van CodeIn deze tutorial leer je hoe je met Igniter Active Record records invoegt, bijwerkt, verwijdert en leest. We maken databasemodellen en gebruiken formulieren om database-records aan te maken en bij te werken. Als je nog helemaal geen ervaring hebt met databases, is deze tutorial wellicht iets voor jou. CodeIgniter, het wordt aangeraden om het volgende te lezen: vorige zelfstudie kopen.
CodeIgniter-databaseconfiguratie
We beginnen met het opzetten van de database voor het tutorialproject. We maken een eenvoudige database voor het beheren van contactgegevens, met twee tabellen: 'pals' en de steden waarin ze wonen. De relatie tussen 'pals' en 'cities' is een-op-een, waarbij 'id' in 'cities' de primaire sleutel is en 'city_id' de externe sleutel in de 'pals'-tabel.
Voer de volgende scripts uit om de database te maken:
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`) );
Laten we nu de tabel met steden aanmaken:
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeIgniter-databasemodellen
We gaan nu modellen maken voor onze database. Het model is het M-gedeelte van de MVC. Het model behandelt gegevenstoegang, gegevensmanipulatie en bedrijfslogica.
In CodeIn Igniter moet elk model de methoden definiรซren die het zal ondersteunen. In plaats van dezelfde code in elk model te herhalen, maken we gebruik van overerving in objectgeoriรซnteerd programmeren en creรซren we een oudermodelklasse die de basismethoden definieert die onze modellen moeten ondersteunen.
De onderstaande tabel toont de methoden die we zullen definiรซren en hoe toegang zal worden verkregen tot de gegevens.
| S / N | Methode | Beschrijving |
|---|---|---|
| 1 | __constructie | Definieert de constructormethode die de constructormethode van de ouderklasse aanroept. |
| 2 | alles krijgen | Haalt alle velden en records uit de database op zonder enige voorwaarden. |
| 3 | get_by_id | Haalt รฉรฉn rij uit de database op met behulp van de primaire sleutel van het type INT met de naam id. |
| 4 | haal_waar | Haalt alle velden uit de database op basis van de opgegeven criteria. |
| 5 | invoegen | Voegt een nieuw record toe aan de database. |
| 6 | -update | Werkt een bestaand database-record bij op basis van de primaire sleutel van het type INT met de naam id. |
| 7 | verwijderen | Verwijdert een bestaand record uit de database op basis van de primaire sleutel van het type INT met de naam id. |
De volgende afbeelding toont het klassendiagram en hoe de kindmodellen Pals en Cities zich verhouden tot het oudermodel BaseModel.
We gaan twee modellen maken zoals in de bovenstaande afbeelding is weergegeven. Maak een nieuwe klasse BaseModel aan in application/models/BaseModel.php en voeg de volgende code toe:
<?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); } }
Hier:
- protected $table = โ; definieert een beveiligde variabele met de naam table. Deze wordt gevuld door de betreffende subklasse om aan te geven met welke tabel de methoden van het basismodel moeten interageren.
- public function __construct() {โฆ} definieert de constructor en voert de constructor van de bovenliggende klasse CI_Model uit.
- get_all() {โฆ} gebruikt de databasebibliotheek en de waarde van $table om de SELECT-query uit te voeren.
- get_by_id($id) {โฆ} haalt รฉรฉn rij op en accepteert een parameter $id van het gegevenstype INT.
- get_where($where) {โฆ} definieert een get-methode waarmee je een where-clausule kunt instellen.
- De functie `insert($data) {โฆ}` accepteert de arrayparameter `$data`, die de waarden bevat die naar de database moeten worden geschreven.
- update($id, $data) {โฆ} accepteert de arrayparameter $data die de waarden bevat die moeten worden bijgewerkt.
- delete($id) {โฆ} accepteert een parameter $id van het gegevenstype INT.
Nu we klaar zijn met de hoofdmodelklasse, gaan we ons Pals-model maken. Maak een nieuw bestand aan in application/models/Pals_model.php en voeg de volgende code toe:
<?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(); } }
Hier:
- class Pals_model extends BaseModel {โฆ} erft van het oudermodel BaseModel en maakt automatisch al zijn methoden toegankelijk voor de subklasse.
- protected $table = 'pals'; definieert de tabelnaam die aan dit model is gekoppeld.
- __construct() {โฆ} initialiseert de constructor van de ouderklasse.
- De functie `public function get_by_id($id) {โฆ}` overschrijft de `get_by_id`-methode om een โโaangepaste implementatie te bieden. De query gebruikt een join om de stadsnaam uit de `cities`-tabel op te halen.
- public function get_all() {โฆ} overschrijft get_all om een โโjoin-query tussen de tabellen pals en cities te implementeren.
Maak een nieuw bestand aan in application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Hier:
- protected $table = 'steden'; definieert de modeldatabasetabel.
Zoals je ziet, bespaart overerving ons veel tijd bij het werken met modellen in CodeOntsteker.
Contacten Manager Controllers
Nu we de modellen hebben gemaakt, gaan we de controllers voor onze applicatie maken. We zullen twee controllers hebben: Steden en Contacten. Laten we beginnen met Steden. Maak een nieuw bestand Cities.php aan in de map application/controllers en voeg de volgende code toe:
<?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')); } }
Hier:
- De bovenstaande code implementeert alle methoden die nodig zijn om rijen in de database aan te maken, bij te werken, te verwijderen en te lezen.
Maak een nieuw bestand met de naam Contacts.php aan in de map application/controllers en voeg de volgende code toe:
<?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')); } }
Contactenbeheerweergaven
We hebben al gekeken naar formulieren en validatie in CodeWe hebben Igniter in de vorige tutorials behandeld en zullen de code gebruiken die we daar hebben ontwikkeld. Voor de volledigheid zien de weergaven van onze applicatie er als volgt uit:
Je kunt de code voor de views downloaden door op de onderstaande link te klikken:
CodeIgniter Contactenbeheerder Weergaven Downloaden


