CodeDatabáze Igniter: Konfigurace, aktualizace a mazání dat
⚡ Chytré shrnutí
CodeDatabáze Igniter vytváří modely a řadiče pro správce kontaktů s podporou MySQLSdílený BaseModel implementuje vkládání, čtení, aktualizaci a mazání a podřízené modely Pals a Cities jej dědí, takže kontrolery opakovaně používají stejné databázové operace v celé aplikaci.

CodeDatabáze zapalovačů
V předchozím tutoriálu jsme se zabývali základy CodeAktivní záznam Igniter a jak vkládat, aktualizovat, mazat a číst záznamy z databáze. V tomto tutoriálu si vytvoříme modely databází a použijeme formuláře k vytváření a aktualizaci záznamů v databázi. Pokud s prací s databázemi v... CodeZapalovač, doporučuje se přečíst si předchozí tutoriál .
CodeKonfigurace databáze zapalovače
Začneme vytvořením databáze tutoriálního projektu. Vytvoříme jednoduchou databázi pro správu kontaktních údajů se dvěma tabulkami s názvem pals a městy, ve kterých žijí. Vztah mezi pals a cities je jeden k jednomu, kde id v tabulce cities je primárním klíčem a city_id je cizím klíčem v tabulce pals.
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í si vytvořme tabulku měst:
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeModely databáze zapalovačů
Nyní vytvoříme modely pro naši databázi. Model je část M databáze. MVC. Model se zabývá přístupem k datům, manipulací s daty a obchodní logikou.
In CodeV Igniteru musí každý model definovat metody, které bude podporovat. Místo opakování stejného kódu v každém modelu využijeme dědičnosti v objektově orientovaném programování a vytvoříme nadřazenou třídu modelu, která definuje 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á nadřazenou metodu 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ě zadaných kritérií. |
| 5 | INSERT | Vloží nový záznam do databáze. |
| 6 | aktualizovat | Aktualizuje existující záznam v databázi 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 znázorňuje 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 souboru application/models/BaseModel.php a 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); } }
Zde:
- protected $table = ”; definuje chráněnou proměnnou s názvem table. Tato proměnná je naplněna příslušnou podtřídou třídy a určuje, se kterou tabulkou by měly metody základního modelu interagovat.
- Veřejná funkce __construct() {…} definuje konstruktor a spouští konstruktor nadřazené třídy CI_Model.
- Funkce get_all() {…} používá databázovou knihovnu a hodnotu proměnné $table ke spuštění dotazu SELECT.
- get_by_id($id) {…} načte jeden řádek a přijme parametr $id datového typu INT.
- Metoda get_where($where) {…} definuje metodu get, která umožňuje nastavit klauzuli where.
- insert($data) {…} přijímá parametr pole $data obsahující hodnoty, které se mají zapsat do databáze.
- update($id, $data) {…} přijímá parametr pole $data obsahující hodnoty, které mají být aktualizovány.
- delete($id) {…} přijímá parametr $id datového typu INT.
Nyní, když jsme hotovi s nadřazenou třídou modelu, vytvořme náš model Pals. Vytvořte nový soubor v souboru application/models/Pals_model.php a přidejte do něj 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(); } }
Zde:
- class Pals_model extends BaseModel {…} rozšiřuje nadřazený model BaseModel a automaticky zpřístupňuje všechny jeho metody podřízené třídě.
- protected $table = 'pals'; definuje název tabulky přidružené k tomuto modelu.
- __construct() {…} inicializuje konstruktor nadřazené třídy.
- Veřejná funkce get_by_id($id) {…} přepisuje funkci get_by_id a poskytuje tak vlastní implementaci. Dotaz používá spojení k načtení názvu města z tabulky cities.
- public function get_all() {…} přepisuje funkci get_all a implementuje dotaz na spojení mezi tabulkami pals a cities.
Vytvořte nový soubor v souboru application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Zde:
- protected $table = 'města'; definuje modelovou databázovou tabulku.
Jak vidíte, dědičnost nám ušetří spoustu času při práci s modely v CodeZapalovač.
Ovladače Contacts Manager
Nyní, když jsme vytvořili modely, vytvořme pro naši aplikaci controllery. Budeme mít dva controllery, Cities a Contacts. Začněme s Cities. Vytvořte nový soubor Cities.php v adresáři application/controllers a 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')); } }
Zde:
- Výše uvedený kód implementuje všechny metody potřebné k vytváření, aktualizaci, mazání a čtení řádků z databáze.
Vytvořte další soubor Contacts.php v adresáři application/controllers a přidejte do něj 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ů
Formuláře a validaci jsme si již prohlédli v CodeIgniter v předchozích tutoriálech a použijeme kód, který jsme tam vyvinuli. Pro úplnost budou pohledy naší aplikace vypadat následovně:
Kód pro zobrazení si můžete stáhnout kliknutím na níže uvedený odkaz:
CodeSprávce kontaktů zapalovače – zobrazení – stažení


