CodeIgniter-database: gegevens configureren, bewerken, bijwerken en verwijderen
Codeigniter-database
In de vorige tutorial hebben we de basisprincipes van CodeIgniter actieve records besproken en hoe records uit de database kunnen worden ingevoegd, bijgewerkt, verwijderd en gelezen. In deze zelfstudie maken we databasemodellen en gebruiken we formulieren om databaserecords te maken en bij te werken. als je helemaal nieuw bent in het werken met databases in CodeIgniter, dan raad je aan de vorige tutorial te lezen
Codeigniter-databaseconfiguratie
We beginnen met het maken van de tutorial project database. We maken een simpele database voor het beheren van contactgegevens. We maken een simpele database met twee (2) tabellen met de namen pals en de steden waar ze wonen. De relatie tussen pals en steden is een-op-een met id in steden als primaire sleutel en city_id als vreemde sleutel in pals tabellen.
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 stedentabel maken
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
CodeIgniter-databasemodellen
We gaan nu modellen voor onze database maken. Het model is het M-gedeelte van de MVC. Het model behandelt gegevenstoegang, gegevensmanipulatie en bedrijfslogica.
In CodeIgniter moet elk model de methoden definiëren die het ondersteunt. In plaats van dezelfde code in elk model te herhalen, zullen we profiteren van overerving bij objectgeoriënteerd programmeren en een bovenliggende modelklasse creëren die de basismethoden definieert die we door onze modellen willen laten 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 bovenliggende constructormethode aanroept |
2 | alles krijgen | Haalt zonder enige voorwaarden alle velden en records uit de database op |
3 | get_by_id | Haalt een enkele rij op uit de database met behulp van de primaire sleutel van het INT-type genaamd id |
4 | haal_waar | Haalt alle velden uit de database op basis van de basiscriteria |
5 | invoegen | Voegt een nieuw record in de database in |
6 | -update | Werkt een bestaand databaserecord bij op basis van de primaire sleutel van het INT-type genaamd id |
7 | verwijderen | Verwijdert een bestaand record uit de database op basis van de primaire sleutel van het INT-type genaamd id |
De onderstaande afbeelding toont het klassendiagram en hoe de onderliggende modellen Pals en Cities zich verhouden tot het bovenliggende model BaseModel.
We zullen twee modellen maken zoals beschreven in de bovenstaande afbeelding
Maak een nieuwe klasse BaseModel in application/models/BaseModel.php
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,
- beschermd $tabel = ”; definieert een beschermde variabele met de naam tabel. Dit wordt ingevuld door de respectieve onderliggende klasse om aan te geven met welke tabel onze basismodelklassemethoden moeten communiceren.
- public function __construct() {…} definieert de constructormethode en voert de constructormethode van de bovenliggende klasse CI_Model uit.
- get_all() {…} gebruikt de databasebibliotheek en de waarde van de variabele $table om de SELECT-query uit te voeren op onze database.
- get_by_id($id) {…} definieert de methode voor het ophalen van een enkele rij uit de database en accepteert een parameter $id die van het INT-gegevenstype moet zijn.
- get_where($where) {…} definieert de get-methode waarmee u een Where-clausule kunt instellen.
- insert($data) {…} definieert de invoegmethode en accepteert de arrayparameter $data die de waarden bevat die naar de database moeten worden geschreven.
- update($id, $data) {…} definieert de updatemethode en accepteert de arrayparameter $data die de waarden bevat die moeten worden bijgewerkt in de database.
- delete($id) {…} definieert de verwijdermethode die een parameter van $id accepteert die van het gegevenstype INT moet zijn.
nu we klaar zijn met de bovenliggende modelklasse, kunnen we onze Pals-modellen maken
Maak een nieuw bestand in application/models/Pals.php
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 breidt BaseModel uit {…} breidt het bovenliggende model BaseModel uit en maakt automatisch alle methoden die in het BaseModel zijn gedefinieerd toegankelijk voor de onderliggende klasse.
- protected $table = 'vrienden'; definieert de tabelnaam die is gekoppeld aan ons bovenliggende model
- __construct() {…} initialiseert de bovenliggende constructor
- public function get_by_id($id) {…} overschrijft de get_by_id om aangepaste implementatie te bieden die specifiek is voor het Pals-model. De query voor get_by_id gebruikt een join om de stadsnaam uit de stedentabel op te halen
- public function get_all() {…} overschrijft de get_all methode om een join-query tussen pals en cities-tabel te implementeren
Maak een nieuw bestand in application/models/Cities.php
<?php class Cities extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
HIER,
protected $table = 'steden'; definieert de modeldatabasetabel.
Zoals je uit de bovenstaande code kunt zien, bespaart Overerving ons veel tijd bij het werken met modellen in CodeIgniter. In het volgende gedeelte zullen we leren
Contacten Manager Controllers
Nu we de modellen hebben gemaakt, gaan we de controllers voor onze toepassing maken. We zullen twee controllers hebben, namelijk Contacten en Steden
Laten we beginnen met steden
Maak een nieuw bestand Cities.php in de map application/controllers
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 uit de database te maken, bij te werken, te verwijderen en te lezen.
Maak nog een bestand Contacts.php in application/controllers
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 in de vorige tutorials al gekeken naar formulieren en validatie in CodeIgniter. We zullen de code gebruiken die we in de vorige tutorials hebben ontwikkeld. Voor de volledigheid reproduceren we de code die we in de vorige tutorials hebben gemaakt.
De opvattingen van onze aanvraag zijn als volgt
U kunt de code voor bovenstaande weergaven downloaden door op de onderstaande link te klikken
CodeIgniter Contacten Manager-weergaven downloaden
Samenvatting
In deze zelfstudie leert u hoe u modellen maakt in CodeIgniterWe hebben gebruikgemaakt van overerving in objectgeoriënteerd programmeren om de herbruikbaarheid van code te bevorderen door een basismodel te creëren dat de vier belangrijkste databasebewerkingen implementeert: invoegen, lezen, bijwerken en verwijderen.
We hebben de concepten gedemonstreerd aan de hand van een praktische toepassing. In de volgende tutorials gaan we hiermee door door meer functionaliteit aan de toepassing toe te voegen.