CodeBaza danych Igniter: konfiguracja, aktualizacja i usuwanie danych
โก Inteligentne podsumowanie
CodeBaza danych Igniter tworzy modele i kontrolery dla menedลผera kontaktรณw obsลugiwanego przez MySQLWspรณลdzielony BaseModel implementuje operacje wstawiania, odczytu, aktualizacji i usuwania, a modele podrzฤdne Pals i Cities dziedziczฤ go, dziฤki czemu kontrolery ponownie wykorzystujฤ te same operacje bazy danych w caลej aplikacji.

CodeBaza danych Igniter
W poprzednim samouczku omรณwiliลmy podstawy CodeIgniter Active Record i jak wstawiaฤ, aktualizowaฤ, usuwaฤ i odczytywaฤ rekordy z bazy danych. W tym samouczku utworzymy modele baz danych i uลผyjemy formularzy do tworzenia i aktualizowania rekordรณw w bazie danych. Jeลli dopiero zaczynasz pracฤ z bazami danych, CodeZapลonniku, zaleca siฤ zapoznanie siฤ z poprzedni samouczek pierwszy.
CodeKonfiguracja bazy danych Igniter
Zaczniemy od utworzenia bazy danych projektu samouczka. Stworzymy prostฤ bazฤ danych do zarzฤ dzania danymi kontaktowymi, z dwiema tabelami o nazwach โpalsโ i โcitysโ (miasta, w ktรณrych mieszkajฤ ). Relacja miฤdzy tabelami โpalsโ i โcitysโ jest jednoznaczna, z identyfikatorem w tabeli โcitysโ jako kluczem podstawowym i โcity_idโ jako kluczem obcym w tabeli โpalsโ.
Uruchom nastฤpujฤ ce skrypty, aby utworzyฤ bazฤ danych:
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`) );
Utwรณrzmy teraz tabelฤ miast:
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeModele bazy danych Igniter
Teraz utworzymy modele dla naszej bazy danych. Model jest czฤลciฤ M MVC. Model dotyczy dostฤpu do danych, manipulacji danymi i logiki biznesowej.
In CodeW Igniterze kaลผdy model musi zdefiniowaฤ metody, ktรณre bฤdzie obsลugiwaล. Zamiast powtarzaฤ ten sam kod w kaลผdym modelu, skorzystamy z dziedziczenia w programowaniu obiektowym i utworzymy klasฤ modelu nadrzฤdnego, ktรณra definiuje podstawowe metody, ktรณre nasze modele majฤ obsลugiwaฤ.
Poniลผsza tabela przedstawia metody, ktรณre zdefiniujemy oraz sposรณb dostฤpu do danych.
| S / N | Metoda wykonania | OPIS |
|---|---|---|
| 1 | __zbudowaฤ | Definiuje metodฤ konstruktora, ktรณra wywoลuje metodฤ konstruktora nadrzฤdnego. |
| 2 | get_all | Pobiera wszystkie pola i rekordy z bazy danych bez ลผadnych warunkรณw. |
| 3 | get_by_id | Pobiera pojedynczy wiersz z bazy danych przy uลผyciu klucza podstawowego typu INT o nazwie id. |
| 4 | dostaฤ_gdzie | Pobiera wszystkie pola z bazy danych na podstawie podanych kryteriรณw. |
| 5 | wstawiฤ | Wstawia nowy rekord do bazy danych. |
| 6 | aktualizacja | Aktualizuje istniejฤ cy rekord bazy danych na podstawie klucza podstawowego typu INT o nazwie id. |
| 7 | usunฤ ฤ | Usuwa istniejฤ cy rekord z bazy danych na podstawie klucza podstawowego typu INT o nazwie id. |
Poniลผszy obraz pokazuje diagram klas i sposรณb, w jaki modele podrzฤdne Pals i Cities odnoszฤ siฤ do modelu nadrzฤdnego BaseModel.
Stworzymy dwa modele, jak opisano na powyลผszym obrazku. Utwรณrz nowฤ klasฤ BaseModel w pliku application/models/BaseModel.php i dodaj nastฤpujฤ cy kod:
<?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); } }
Tutaj:
- protected $table = โ; definiuje chronionฤ zmiennฤ o nazwie table. Jest ona wypeลniana przez odpowiedniฤ klasฤ potomnฤ , aby okreลliฤ, z ktรณrฤ tabelฤ metody modelu bazowego powinny wchodziฤ w interakcjฤ.
- publiczna funkcja __construct() {โฆ} definiuje konstruktor i wykonuje konstruktor klasy nadrzฤdnej CI_Model.
- get_all() {โฆ} uลผywa biblioteki bazy danych i wartoลci $table do uruchomienia zapytania SELECT.
- get_by_id($id) {โฆ} pobiera pojedynczy wiersz i akceptuje parametr $id typu danych INT.
- get_where($where) {โฆ} definiuje metodฤ get umoลผliwiajฤ cฤ ustawienie klauzuli where.
- insert($data) {โฆ} akceptuje parametr tablicowy $data zawierajฤ cy wartoลci, ktรณre majฤ zostaฤ zapisane w bazie danych.
- update($id, $data) {โฆ} akceptuje parametr tablicowy $data zawierajฤ cy wartoลci przeznaczone do aktualizacji.
- delete($id) {โฆ} akceptuje parametr $id typu danych INT.
Skoro skoลczyliลmy pracฤ z klasฤ modelu nadrzฤdnego, utwรณrzmy model Pals. Utwรณrz nowy plik w aplikacji/models/Pals_model.php i dodaj nastฤpujฤ cy kod:
<?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(); } }
Tutaj:
- klasa Pals_model rozszerza BaseModel {โฆ} rozszerza model nadrzฤdny BaseModel i automatycznie udostฤpnia wszystkie jego metody klasie podrzฤdnej.
- protected $table = 'pals'; definiuje nazwฤ tabeli skojarzonej z tym modelem.
- __construct() {โฆ} inicjuje konstruktor nadrzฤdny.
- Funkcja publiczna get_by_id($id) {โฆ} zastฤpuje get_by_id, aby zapewniฤ niestandardowฤ implementacjฤ. Zapytanie uลผywa sprzฤลผenia, aby pobraฤ nazwฤ miasta z tabeli โcityโ.
- publiczna funkcja get_all() {โฆ} zastฤpuje get_all w celu zaimplementowania zapytania ลฤ czฤ cego miฤdzy tabelami pals i cities.
Utwรณrz nowy plik w aplikacji/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Tutaj:
- chroniony $table = 'miasta'; definiuje tabelฤ bazy danych modelu.
Jak widaฤ, dziedziczenie oszczฤdza nam mnรณstwo czasu podczas pracy z modelami w CodeZapalnik.
Kontrolery menedลผera kontaktรณw
Skoro stworzyliลmy juลผ modele, stwรณrzmy kontrolery dla naszej aplikacji. Bฤdziemy mieli dwa kontrolery: Cities i Contacts. Zacznijmy od Cities. Utwรณrz nowy plik Cities.php w katalogu application/controllers i dodaj nastฤpujฤ cy kod:
<?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')); } }
Tutaj:
- Powyลผszy kod implementuje wszystkie metody potrzebne do tworzenia, aktualizowania, usuwania i odczytywania wierszy z bazy danych.
Utwรณrz kolejny plik Contacts.php w folderze application/controllers i dodaj nastฤpujฤ cy kod:
<?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')); } }
Widoki Menedลผera kontaktรณw
Przyjrzeliลmy siฤ juลผ formularzom i walidacji w CodeIgniter w poprzednich samouczkach i wykorzystamy opracowany tam kod. Dla kompletnoลci, widoki naszej aplikacji bฤdฤ wyglฤ daฤ nastฤpujฤ co:
Kod widokรณw moลผesz pobraฤ, klikajฤ c poniลผszy link:
CodeWidoki menedลผera kontaktรณw Igniter do pobrania


