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.