Baza danych CodeIgniter: konfiguracja, edycja, aktualizacja, usuwanie danych
Baza Codeignitera
W poprzednim samouczku omรณwiliลmy podstawy aktywnego rekordu w CodeIgniter oraz sposoby wstawiania, aktualizowania, usuwania i odczytywania rekordรณw z bazy danych. W tym samouczku utworzymy modele baz danych i uลผyjemy formularzy do tworzenia i aktualizowania rekordรณw bazy danych. jeลli nie masz doลwiadczenia w pracy z bazami danych w CodeIgniter, zalecamy przeczytanie poprzedniego samouczka
Konfiguracja bazy danych Codeignitera
Zaczniemy od utworzenia bazy danych projektu samouczka. Utworzymy prostฤ bazฤ danych do zarzฤ dzania danymi kontaktowymi. Utworzymy prostฤ bazฤ danych z dwiema (2) tabelami o nazwach pals i cities, w ktรณrych mieszkajฤ . Relacja miฤdzy pals i cities jest typu jeden do jednego, przy czym id w cities jest kluczem podstawowym, a city_id jest kluczem obcym w tabelach 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`) );
Stwรณrzmy teraz tabelฤ miast
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
Modele baz danych CodeIgnitera
Stworzymy teraz modele dla naszej bazy danych. Model jest czฤลciฤ M MVC. Model dotyczy dostฤpu do danych, manipulacji danymi i logiki biznesowej.
W CodeIgniter 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 nadrzฤdnฤ klasฤ modelu, ktรณra zdefiniuje podstawowe metody, ktรณre chcemy, aby nasze modele obsลugiwaลy.
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 kryteriรณw opartych na |
| 5 | wstawiฤ | Wstawia nowy rekord do bazy danych |
| 6 | aktualizacja | Aktualizuje istniejฤ cy rekord bazy danych w oparciu o klucz podstawowy 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 zgodnie z opisem na powyลผszym obrazku
Utwรณrz nowฤ klasฤ BaseModel w application/models/BaseModel.php
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,
- chroniony $tabela = โ; definiuje chronionฤ zmiennฤ o nazwie table. Zostanie ono wypeลnione przez odpowiedniฤ klasฤ podrzฤdnฤ , aby okreลliฤ, z ktรณrฤ tabelฤ powinny wspรณลdziaลaฤ nasze metody klasy modelu podstawowego.
- funkcja publiczna __construct() {โฆ} definiuje metodฤ konstruktora i wykonuje metodฤ konstruktora klasy nadrzฤdnej CI_Model.
- get_all() {โฆ} uลผywa biblioteki bazy danych i wartoลci zmiennej $table do uruchomienia zapytania SELECT wzglฤdem naszej bazy danych.
- get_by_id($id) {โฆ} definiuje sposรณb pobrania pojedynczego wiersza z bazy danych i akceptuje parametr $id, ktรณry powinien byฤ typu danych INT.
- get_where($where) {โฆ} definiuje metodฤ get, ktรณra pozwala ustawiฤ klauzulฤ Where.
- wstaw($data) {โฆ} definiuje metodฤ wstawiania i akceptuje parametr tablicowy $data, ktรณry zawiera wartoลci do zapisania do bazy danych.
- update($id, $data) {โฆ} definiuje metodฤ aktualizacji i akceptuje parametr tablicowy $data zawierajฤ cy wartoลci, ktรณre majฤ zostaฤ zaktualizowane w bazie danych.
- Delete($id) {โฆ} definiuje metodฤ usuwania, ktรณra akceptuje parametr $id, ktรณry powinien byฤ typu danych INT.
teraz, gdy skoลczyliลmy z klasฤ modelu nadrzฤdnego, utwรณrzmy nasze modele Pals
Utwรณrz nowy plik w application/models/Pals.php
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,
- class Pals Extends BaseModel {โฆ} rozszerza model nadrzฤdny BaseModel i automatycznie udostฤpnia wszystkie metody zdefiniowane w BaseModel klasie podrzฤdnej.
- chroniony $table = 'kumple'; definiuje nazwฤ tabeli zwiฤ zanฤ z naszym modelem nadrzฤdnym
- __construct() {โฆ} inicjuje konstruktor nadrzฤdny
- funkcja publiczna get_by_id($id) {โฆ} zastฤpuje get_by_id, aby zapewniฤ niestandardowฤ implementacjฤ specyficznฤ dla modelu Pals. Zapytanie get_by_id uลผywa sprzฤลผenia w celu pobrania nazwy miasta z tabeli miast
- funkcja publiczna get_all() {โฆ} zastฤpuje metodฤ get_all, aby zaimplementowaฤ zapytanie ลฤ czฤ ce miฤdzy znajomymi a tabelฤ miast
Utwรณrz nowy plik w application/models/Cities.php
<?php
class Cities extends BaseModel {
protected $table = 'cities';
public function __construct() {
parent::__construct();
}
}
TUTAJ,
chroniony $table = 'miasta'; definiuje tabelฤ bazy danych modelu.
Jak widaฤ z powyลผszego kodu, Inheritance oszczฤdza nam mnรณstwo czasu podczas pracy z modelami w CodeIgniter. W nastฤpnej czฤลci dowiemy siฤ
Kontrolery menedลผera kontaktรณw
Teraz, gdy stworzyliลmy modele, utwรณrzmy kontrolery dla naszej aplikacji. Bฤdziemy mieฤ dwรณch kontrolerรณw, a mianowicie Kontakty i Miasta
Zacznijmy od miast
Utwรณrz nowy plik Cities.php w katalogu application/controllers
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 aplikacji/kontrolerach
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 tutorialach. Bฤdziemy uลผywaฤ kodu, ktรณry opracowaliลmy w poprzednich tutorialach. Dla kompletnoลci odtworzymy kod, ktรณry stworzyliลmy w poprzednich tutorialach.
Widoki naszej aplikacji bฤdฤ nastฤpujฤ ce
Moลผesz pobraฤ kod powyลผszych widokรณw, klikajฤ c link poniลผej
Pobieranie menedลผera kontaktรณw CodeIgniter
Podsumowanie
W tym samouczku dowiesz siฤ, jak tworzyฤ modele w programie CodeIgniterSkorzystaliลmy z dziedziczenia w programowaniu obiektowym, aby promowaฤ ponowne wykorzystywanie kodu, tworzฤ c model bazowy, ktรณry implementuje cztery gลรณwne operacje bazy danych: wstawianie, odczytywanie, aktualizowanie i usuwanie.
Zaprezentowaliลmy te koncepcje na przykลadzie praktycznego zastosowania. W kolejnych samouczkach bฤdziemy to kontynuowaฤ, dodajฤ c do aplikacji wiฤcej funkcjonalnoลci.


