CodeIgniter Database: Konfiguration, Redigera, Uppdatera, Ta bort data
Codeigniter-databas
I den tidigare handledningen har vi tรคckt grunderna i CodeIgniter Active Record och hur man infogar, uppdaterar, tar bort och lรคser poster frรฅn databasen. I den hรคr handledningen kommer vi att skapa databasmodeller och anvรคnda formulรคr fรถr att skapa och uppdatera databasposter. om du รคr helt ny pรฅ att arbeta med databaser i CodeIgniter, rekommenderade du att lรคsa den tidigare handledningen
Codeigniter-databaskonfiguration
Vi bรถrjar med att skapa tutorialprojektdatabasen. Vi kommer att skapa en enkel databas fรถr att hantera kontaktuppgifter. Vi kommer att skapa en enkel databas med tvรฅ (2) tabeller med namn pรฅ vรคnner och stรคder som de bor i. Fรถrhรฅllandet mellan vรคnner och stรคder รคr en-till-en med id i stรคder som primรคrnyckel och city_id som frรคmmande nyckel i pals-tabeller .
Kรถr fรถljande skript fรถr att skapa databasen:
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`) );
Lรฅt oss nu skapa stรคdtabellen
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
CodeIgniter databasmodeller
Vi kommer nu att skapa modeller fรถr vรฅr databas. Modellen รคr M-delen av MVC. Modellen behandlar dataรฅtkomst, datamanipulation och affรคrslogik.
I CodeIgniter mรฅste varje modell definiera de metoder som den kommer att stรถdja. Istรคllet fรถr att upprepa samma kod i varje modell kommer vi att dra fรถrdel av arv i objektorienterad programmering och skapa en รถverordnad modellklass som kommer att definiera de grundlรคggande metoderna som vi vill att vรฅra modeller ska stรถdja.
Tabellen nedan visar de metoder som vi kommer att definiera och hur data kommer att nรฅs.
| S / N | Metod | BESKRIVNING |
|---|---|---|
| 1 | __konstruera | Definierar konstruktormetoden som anropar den รถverordnade konstruktormetoden |
| 2 | fรฅ alla | Hรคmtar alla fรคlt och poster frรฅn databasen utan nรฅgra villkor |
| 3 | get_by_id | Hรคmtar en enda rad frรฅn databasen med hjรคlp av primรคrnyckeln av INT-typ med namnet id |
| 4 | komma_vart | Hรคmtar alla fรคlt frรฅn databasen baserat pรฅ baserat i kriterier |
| 5 | infoga | Infogar en ny post i databasen |
| 6 | uppdatering | Uppdaterar en befintlig databaspost baserat pรฅ primรคrnyckeln av INT-typ med namnet id |
| 7 | radera | Tar bort en befintlig post frรฅn databasen baserat pรฅ primรคrnyckeln av INT-typ med namnet id |
Fรถljande bild visar klassdiagrammet och hur underordnade modeller fรถr Pals och Cities relaterar till den รถverordnade modellen BaseModel.
Vi kommer att skapa tvรฅ modeller som beskrivs i bilden ovan
Skapa en ny klass BaseModel i application/models/BaseModel.php
Lรคgg till fรถljande 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);
}
}
HรR,
- skyddad $table = โ; definierar en skyddad variabel med namnet tabell. Detta kommer att fyllas i av respektive barnklass fรถr att specificera vilken tabell vรฅra basmodellklassmetoder ska interagera med.
- public funktion __construct() {...} definierar konstruktormetoden och exekverar konstruktormetoden fรถr den รถverordnade klassen CI_Model.
- get_all() {...} anvรคnder databasbiblioteket och vรคrdet pรฅ variabeln $table fรถr att kรถra SELECT-frรฅgan mot vรฅr databas.
- get_by_id($id) {...} definierar metoden fรถr att hรคmta en enstaka rad frรฅn databasen och accepterar en parameter $id som ska vara av INT-datatyp.
- get_where($where) {...} definierar get-metoden som lรฅter dig stรคlla in en where-sats.
- insert($data) {...} definierar insertmetoden och accepterar arrayparametern $data som innehรฅller vรคrdena som ska skrivas till databasen.
- update($id, $data) {...} definierar uppdateringsmetoden och accepterar arrayparametern $data som innehรฅller vรคrdena som ska uppdateras i databasen.
- delete($id) {...} definierar raderingsmetoden som accepterar en parameter av $id som ska vara av datatyp INT.
Nu nรคr vi รคr klara med den รถverordnade modellklassen, lรฅt oss skapa vรฅra Pals-modeller
Skapa en ny fil i application/models/Pals.php
Lรคgg till fรถljande 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();
}
}
HรR,
- class Pals utรถkar BaseModel {โฆ} utรถkar den รถverordnade modellen BaseModel och gรถr automatiskt alla metoder som definieras i BaseModel รฅtkomst till den underordnade klassen.
- skyddad $table = 'kompisar'; definierar tabellnamnet som รคr associerat med vรฅr รถverordnade modell
- __construct() {...} initierar den รถverordnade konstruktorn
- offentlig funktion get_by_id($id) {...} รฅsidosรคtter get_by_id fรถr att tillhandahรฅlla anpassad implementering specifik fรถr Pals-modellen. Frรฅgan fรถr get_by_id anvรคnder en join fรถr att hรคmta stadsnamnet frรฅn stadstabellen
- public funktion get_all() {...} รฅsidosรคtter get_all-metoden fรถr att implementera en kopplingsfrรฅga mellan pals och stadstabeller
Skapa en ny fil i application/models/Cities.php
<?php
class Cities extends BaseModel {
protected $table = 'cities';
public function __construct() {
parent::__construct();
}
}
HรR,
skyddad $table = 'stรคder'; definierar modellens databastabell.
Som du kan se av ovanstรฅende kod sparar Arv oss mycket tid nรคr vi arbetar med modeller i CodeIgniter. I nรคsta avsnitt kommer vi att lรคra oss
Kontakter Manager Controllers
Nu nรคr vi har skapat modellerna, lรฅt oss skapa kontrollerna fรถr vรฅr applikation. Vi kommer att ha tvรฅ kontroller, nรคmligen kontakter och stรคder
Lรฅt oss bรถrja med stรคder
Skapa en ny fil Cities.php i application/controllers-katalogen
Lรคgg till fรถljande 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'));
}
}
HรR,
Ovanstรฅende kod implementerar alla metoder som behรถvs fรถr att skapa, uppdatera, ta bort och lรคsa rader frรฅn databasen.
Skapa ytterligare en fil Contacts.php i program/kontroller
Lรคgg till fรถljande 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'));
}
}
Kontakthanterarens vyer
Vi har redan tittat pรฅ formulรคr och validering i CodeIgniter i de tidigare handledningarna. Vi kommer att anvรคnda koden som vi utvecklade i de tidigare handledningarna. Fรถr fullstรคndighetens skull kommer vi att รฅterskapa koden vi skapade i de tidigare handledningarna.
Synpunkterna pรฅ vรฅr ansรถkan kommer att vara fรถljande
Du kan ladda ner koden fรถr ovanstรฅende vyer genom att klicka pรฅ lรคnken nedan
CodeIgniter Contacts Manager Views Ladda ner
Sammanfattning
I den hรคr handledningen kommer du att lรคra dig hur du skapar modeller i CodeIgniter. Vi drog fรถrdel av arv i objektorienterad programmering fรถr att frรคmja kodรฅteranvรคndbarhet genom att skapa en basmodell som implementerar de fyra stora databasoperationerna att infoga, lรคsa, uppdatera och ta bort.
Vi har demonstrerat koncepten med hjรคlp av en praktisk applikation, och vi kommer att fortsรคtta att gรถra det i nรคsta handledning genom att lรคgga till mer funktionalitet till applikationen.


