Databáze CodeIgniter: Konfigurace, úprava, aktualizace, smazání dat
Databáze Codeigniter
V předchozím tutoriálu jsme probrali základy aktivního záznamu CodeIgniter a jak vkládat, aktualizovat, mazat a číst záznamy z databáze. V tomto tutoriálu vytvoříme databázové modely a použijeme formuláře k vytvoření a aktualizaci databázových záznamů. pokud jste v práci s databázemi v CodeIgniter úplným nováčkem, pak vám doporučujeme přečíst si předchozí tutoriál
Konfigurace databáze Codeigniter
Začneme vytvořením databáze výukového projektu. Vytvoříme jednoduchou databázi pro správu kontaktních údajů. Vytvoříme jednoduchou databázi se dvěma (2) tabulkami jmen kamarádů a měst, ve kterých žijí. Vztah mezi kamarády a městy je jedna ku jedné s id ve městech jako primárním klíčem a city_id jako cizím klíčem v tabulkách kamarádů .
Pro vytvoření databáze spusťte následující skripty:
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`) );
Nyní vytvoříme tabulku měst
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
Databázové modely CodeIgniter
Nyní vytvoříme modely pro naši databázi. Model je součástí M MVC. Model se zabývá přístupem k datům, manipulací s daty a obchodní logikou.
V CodeIgniter musí každý model definovat metody, které bude podporovat. Místo opakování stejného kódu v každém modelu využijeme výhody dědičnosti v objektově orientovaném programování a vytvoříme nadřazenou třídu modelu, která bude definovat základní metody, které chceme, aby naše modely podporovaly.
Níže uvedená tabulka ukazuje metody, které budeme definovat, a jak se bude k datům přistupovat.
S / N | Metoda | Description |
---|---|---|
1 | __postavit | Definuje metodu konstruktoru, která volá metodu nadřazeného konstruktoru |
2 | dostat všechny | Načte všechna pole a záznamy z databáze bez jakýchkoli podmínek |
3 | get_by_id | Načte jeden řádek z databáze pomocí primárního klíče typu INT s názvem id |
4 | get_where | Načte všechna pole z databáze na základě kritérií založených v |
5 | INSERT | Vloží nový záznam do databáze |
6 | aktualizovat | Aktualizuje existující záznam databáze na základě primárního klíče typu INT s názvem id |
7 | vymazat | Odstraní existující záznam z databáze na základě primárního klíče typu INT s názvem id |
Následující obrázek ukazuje diagram tříd a vztah podřízených modelů Pals a Cities k nadřazenému modelu BaseModel.
Vytvoříme dva modely, jak je popsáno na obrázku výše
Vytvořte novou třídu BaseModel v application/models/BaseModel.php
Přidejte následující kód
<?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); } }
TADY,
- chráněná $tabulka = ”; definuje chráněnou proměnnou s názvem tabulka. Toto bude vyplněno příslušnou podřízenou třídou, aby bylo možné určit, se kterou tabulkou by měly naše metody třídy základního modelu komunikovat.
- public function __construct() {…} definuje metodu konstruktoru a provádí metodu konstruktoru nadřazené třídy CI_Model.
- get_all() {…} používá databázovou knihovnu a hodnotu proměnné $table ke spuštění SELECT dotazu proti naší databázi.
- get_by_id($id) {…} definuje metodu pro načtení jednoho řádku z databáze a přijímá parametr $id, který by měl být datového typu INT.
- get_where($where) {…} definuje metodu get, která vám umožňuje nastavit klauzuli where.
- insert($data) {…} definuje metodu insert a přijímá parametr pole $data, který obsahuje hodnoty, které mají být zapsány do databáze.
- update($id, $data) {…} definuje metodu aktualizace a přijímá parametr pole $data, který obsahuje hodnoty, které mají být aktualizovány v databázi.
- delete($id) {…} definuje metodu mazání, která přijímá parametr $id, který by měl být datového typu INT.
nyní, když jsme skončili s rodičovskou třídou modelu, pojďme vytvořit naše modely Pals
Vytvořte nový soubor v application/models/Pals.php
Přidejte následující kód
<?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(); } }
TADY,
- class Pals rozšiřuje BaseModel {…} rozšiřuje rodičovský model BaseModel a automaticky zpřístupňuje všechny metody definované v BaseModel podřízené třídě.
- protected $table = 'kamarádi'; definuje název tabulky přidružený k našemu nadřazenému modelu
- __construct() {…} inicializuje nadřazený konstruktor
- veřejná funkce get_by_id($id) {…} přepíše get_by_id, aby poskytla vlastní implementaci specifickou pro model Pals. Dotaz na get_by_id používá spojení k načtení názvu města z tabulky měst
- veřejná funkce get_all() {…} přepíše metodu get_all pro implementaci spojovacího dotazu mezi tabulkou kamarádů a měst
Vytvořte nový soubor v application/models/Cities.php
<?php class Cities extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
TADY,
protected $table = 'města'; definuje modelovou databázovou tabulku.
Jak je vidět z výše uvedeného kódu, dědičnost nám ušetří spoustu času při práci s modely v CodeIgniter. V další části se to naučíme
Ovladače Contacts Manager
Nyní, když jsme vytvořili modely, pojďme vytvořit ovladače pro naši aplikaci. Budeme mít dva ovladače, jmenovitě Kontakty a Města
Začněme městy
Vytvořte nový soubor Cities.php v adresáři application/controllers
Přidejte následující kód
<?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')); } }
TADY,
Výše uvedený kód implementuje všechny metody potřebné k vytvoření, aktualizaci, odstranění a čtení řádků z databáze.
Vytvořte další soubor Contacts.php v aplikaci/ovladače
Přidejte následující kód
<?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')); } }
Zobrazení Správce kontaktů
Na formuláře a ověřování v CodeIgniter jsme se již podívali v předchozích tutoriálech. Použijeme kód, který jsme vyvinuli v předchozích tutoriálech. Pro úplnost zopakujeme kód, který jsme vytvořili v předchozích tutoriálech.
Pohledy na naši aplikaci budou následující
Kód pro výše uvedená zobrazení si můžete stáhnout kliknutím na odkaz níže
CodeIgniter Contacts Manager Views Stáhnout
Shrnutí
V tomto tutoriálu se naučíte vytvářet modely v CodeIgniter. Využili jsme výhody dědičnosti v objektově orientovaném programování k podpoře opětovné použitelnosti kódu vytvořením základního modelu, který implementuje čtyři hlavní databázové operace vkládání, čtení, aktualizace a mazání.
Předvedli jsme koncepty pomocí praktické aplikace a budeme v tom pokračovat v dalších tutoriálech přidáním dalších funkcí do aplikace.