CodeIgniter adatbázis: konfigurálás, szerkesztés, frissítés, adatok törlése
Codeigniter adatbázis
Az előző oktatóanyagban bemutattuk a CodeIgniter aktív rekordjának alapjait, valamint a rekordok beillesztését, frissítését, törlését és beolvasását az adatbázisból. Ebben az oktatóanyagban adatbázismodelleket fogunk létrehozni, és űrlapokat használunk adatbázisrekordok létrehozásához és frissítéséhez. ha teljesen új a CodeIgniter adatbázisokkal való munkavégzésében, akkor azt tanácsolta, hogy olvassa el az előző oktatóanyagot
Codeigniter adatbázis-konfiguráció
Kezdjük az oktatói projekt adatbázis létrehozásával. Létrehozunk egy egyszerű adatbázist az elérhetőségek kezelésére. Létrehozunk egy egyszerű adatbázist két (2) táblával, amelyekben megnevezik a haverokat és a városokat, ahol élnek. A haverok és a városok közötti kapcsolat egy az egyhez, a városokban az id az elsődleges kulcs, a city_id pedig az idegen kulcs a baráti táblákban. .
Az adatbázis létrehozásához futtassa a következő szkripteket:
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`) );
Most hozzuk létre a városok táblázatát
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
CodeIgniter adatbázis-modellek
Most modelleket készítünk adatbázisunkhoz. A Modell az M része MVC. A modell adathozzáféréssel, adatmanipulációval és üzleti logikával foglalkozik.
A CodeIgniterben minden modellnek meg kell határoznia azokat a metódusokat, amelyeket támogatni fog. Ahelyett, hogy minden modellben megismételnénk ugyanazt a kódot, kihasználjuk az öröklődés előnyeit az objektum-orientált programozásban, és létrehozunk egy szülőmodell osztályt, amely meghatározza azokat az alapvető metódusokat, amelyeket a modelljeink támogatni kívánunk.
Az alábbi táblázat bemutatja az általunk definiált módszereket és az adatok elérésének módját.
| S / N | Módszer | Leírás |
|---|---|---|
| 1 | __konstruálni | Meghatározza a konstruktor metódust, amely meghívja a szülő konstruktor metódust |
| 2 | get_all | Feltétel nélkül lekéri az adatbázisból az összes mezőt és rekordot |
| 3 | get_by_id | Egyetlen sort kér le az adatbázisból az INT típusú id nevű elsődleges kulcs használatával |
| 4 | get_where | Az összes mezőt lekéri az adatbázisból a kritériumok alapján |
| 5 | helyezze | Új rekordot szúr be az adatbázisba |
| 6 | frissítés | Frissít egy meglévő adatbázisrekordot az INT típusú, id nevű elsődleges kulcs alapján |
| 7 | töröl | Töröl egy meglévő rekordot az adatbázisból az INT típusú id nevű elsődleges kulcs alapján |
A következő kép az osztálydiagramot mutatja, és azt, hogy a Pals és Cities gyermekmodellek hogyan kapcsolódnak a BaseModel szülőmodellhez.
Két modellt készítünk a fenti képen leírtak szerint
Hozzon létre egy új BaseModel osztályt az application/models/BaseModel.php fájlban
Adja hozzá a következő kódot
<?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);
}
}
ITT,
- védett $tábla = ”; táblázat nevű védett változót határoz meg. Ezt a megfelelő gyermekosztály tölti fel, hogy meghatározza, hogy az alapmodell osztálymetódusaink melyik táblával működjenek együtt.
- nyilvános függvény __construct() {…} határozza meg a konstruktor metódust, és végrehajtja a CI_Model szülőosztály konstruktor metódusát.
- get_all() {…} az adatbázis-könyvtárat és a $table változó értékét használja a SELECT lekérdezés futtatásához az adatbázisunkban.
- get_by_id($id) {…} meghatározza a módszert egyetlen sor lekéréséhez az adatbázisból, és elfogad egy $id paramétert, amelynek INT adattípusúnak kell lennie.
- get_where($hol) {…} definiálja a get metódust, amely lehetővé teszi a where záradék beállítását.
- Az insert($data) {…} meghatározza az insert metódust, és elfogadja az adatbázisba írandó értékeket tartalmazó $data tömbparamétert.
- update($id, $data) {…} meghatározza a frissítési metódust, és elfogadja a $data tömbparamétert, amely tartalmazza a frissítendő értékeket az adatbázisban.
- delete($id) {…} meghatározza a törlési metódust, amely elfogadja a $id paraméterét, amelynek INT adattípusúnak kell lennie.
Most, hogy elkészültünk a szülőmodell osztályával, hozzuk létre a Pals modelljeinket
Hozzon létre egy új fájlt az application/models/Pals.php fájlban
Adja hozzá a következő kódot
<?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();
}
}
ITT,
- class Pals kiterjeszti a BaseModel-t {…} kiterjeszti a BaseModel szülőmodellt, és automatikusan eléri a BaseModel-ben meghatározott összes metódust a gyermekosztályhoz.
- védett $tábla = 'barátok'; a szülőmodellünkhöz társított táblanevet határozza meg
- A __construct() {…} inicializálja a szülő konstruktort
- public függvény get_by_id($id) {…} felülírja a get_by_id paramétert, hogy egyedi megvalósítást biztosítson a Pals modellre specifikusan. A get_by_id lekérdezése egy összekapcsolást használ a városnév lekéréséhez a városok táblázatából
- nyilvános függvény get_all() {…} felülírja a get_all metódust a haverok és a városok tábla közötti összekapcsolási lekérdezés megvalósításához
Hozzon létre egy új fájlt az application/models/Cities.php fájlban
<?php
class Cities extends BaseModel {
protected $table = 'cities';
public function __construct() {
parent::__construct();
}
}
ITT,
védett $tábla = 'városok'; meghatározza a modell adatbázis táblát.
Amint a fent megadott kódból látható, az Inheritance sok időt takarít meg, amikor modellekkel dolgozunk a CodeIgniterben. A következő részben megtudjuk
Contacts Manager Controllers
Most, hogy elkészítettük a modelleket, hozzuk létre a vezérlőket az alkalmazásunkhoz. Két vezérlőnk lesz, nevezetesen a Kapcsolatok és a Városok
Kezdjük a városokkal
Hozzon létre egy új Cities.php fájlt az Application/controllers könyvtárban
Adja hozzá a következő kódot
<?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'));
}
}
ITT,
A fenti kód megvalósítja az összes olyan metódust, amely szükséges a sorok adatbázisból történő létrehozásához, frissítéséhez, törléséhez és olvasásához.
Hozzon létre egy másik Contacts.php fájlt az Application/controllerben
Adja hozzá a következő kódot
<?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'));
}
}
Névjegykezelő nézetek
Az előző oktatóanyagokban már megvizsgáltuk az űrlapokat és az érvényesítést a CodeIgniterben. Az előző oktatóanyagokban kifejlesztett kódot fogjuk használni. A teljesség kedvéért reprodukáljuk az előző oktatóanyagokban létrehozott kódot.
Pályázatunk álláspontja a következő lesz
A fenti nézetek kódját az alábbi linkre kattintva töltheti le
CodeIgniter Névjegykezelő Nézetek Letöltés
Összegzésként
Ebből az oktatóanyagból megtudhatja, hogyan hozhat létre modelleket CodeIgniter. Az objektum-orientált programozásban az öröklődés előnyeit kihasználtuk a kód újrafelhasználhatóságának elősegítésére egy olyan alapmodell létrehozásával, amely megvalósítja a négy fő adatbázis-műveletet: beillesztést, olvasást, frissítést és törlést.
A koncepciókat egy gyakorlati alkalmazás segítségével mutattuk be, és ezt folytatjuk a következő oktatóanyagokban, és további funkciókkal bővítjük az alkalmazást.


