CodeIgniter Práce s databází
V předchozím kurzu jsme se seznámili se základy aktivního záznamu CodeIgniter a o tom, jak vkládat, aktualizovat, mazat a číst záznamy z databáze. V tomto kurzu vytvoříme databázové modely a pomocí formulářů vytvoříme a aktualizujeme databázové záznamy. pokud jste v práci s databázemi v CodeIgniteru zcela nová, doporučil jste si přečíst předchozí tutoriál
Konfigurace databáze
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) názvy tabulek pals a městy, ve kterých žijí. Vztah mezi pals 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 pals tabulkách .
Spuštěním následujících skriptů vytvořte databázi:
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`)) ;
CodeIgniter databázové modely
Nyní vytvoříme modely pro naši databázi. Model je M součástí 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 dědičnost v objektově orientovaném programování a vytvoříme třídu nadřazeného modelu, která bude definovat základní metody, které chceme, aby naše modely podporovaly.
V tabulce níže jsou uvedeny metody, které definujeme, a způsob přístupu k datům.
S / N | Metoda | Popis |
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 | dostat_ kam | Načte všechna pole z databáze na základě kritérií založených na |
5 | vložit | Vloží nový záznam do databáze |
6 | Aktualizace | 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 to, jak se podřízené modely Pals and Cities vztahují 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
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,
- protected $ table = ''; definuje chráněnou proměnnou s názvem tabulka. To bude vyplněno příslušnou podřízenou třídou k určení, s jakou tabulkou by měly naše metody tříd základních modelů interagovat.
- public function __construct () {…} definuje metodu konstruktoru a provede metodu konstruktoru nadřazené třídy CI_Model.
- get_all () {…} používá knihovnu databáze a hodnotu proměnné $ table ke spuštění dotazu SELECT proti naší databázi.
- get_by_id ($ id) {…} definuje metodu načítání 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žní 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 hotovi s třídou nadřazeného 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
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 extends BaseModel {…} extends the parent model BaseModel and automatically makes all the methods defined in the BaseModel accessed to the child class.
- protected $ table = 'pals'; definuje název tabulky přidružený k našemu nadřazenému modelu
- __construct () {…} inicializuje nadřazený konstruktor
- public function get_by_id ($ id) {…} přepíše get_by_id a poskytne 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
- public function get_all () {…} přepíše metodu get_all k implementaci dotazu na spojení mezi tabulkou kamarádů a měst
Vytvořte nový soubor v application / models / Cities.php
TADY,
- protected $ table = 'cities'; definuje tabulku databáze modelů.
Jak můžete vidět z výše uvedeného kódu, Inheritance nám ušetří spoustu času při práci s modely v CodeIgniteru. V další části se dozvíme
Správci kontaktů
Teď, když jsme vytvořili modely, vytvořme řadiče pro naši aplikaci. Budeme mít dva správce, jmenovitě Kontakty a Města
Začněme městy
Vytvořte nový soubor Cities.php v adresáři aplikace / řadiče
Přidejte následující kód
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 vytváření, aktualizaci, mazání a čtení řádků z databáze.
Vytvořte další soubor Contacts.php v aplikaci / řadičích
Přidejte následující kód
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ů
Již jsme se podívali na formuláře a ověření v CodeIgniteru v předchozích kurzech. Použijeme kód, který jsme vyvinuli v předchozích výukových programech. Pro úplnost budeme reprodukovat kód, který jsme vytvořili v předchozích tutoriálech.
Názory naší aplikace budou následující
Kliknutím na odkaz níže si můžete stáhnout kód pro výše uvedená zobrazení
CodeIgniter Správce kontaktů Zobrazení Stáhnout
souhrn
V tomto kurzu se naučíte, jak vytvářet modely v CodeIgniter. Využili jsme dědičnost v objektově orientovaném programování, abychom podpořili opětovnou použitelnost 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í.
Ukázali jsme koncepty pomocí praktické aplikace a budeme v tom pokračovat v dalších kurzech přidáním dalších funkcí do aplikace.