CodeIgniter Werken met database
In de vorige tutorial hebben we de basisprincipes van CodeIgniter active record behandeld en hoe je records uit de database kunt invoegen, bijwerken, verwijderen en lezen. In deze zelfstudie maken we databasemodellen en gebruiken we formulieren om databaserecords te maken en bij te werken. als je helemaal nieuw bent in het werken met databases in CodeIgniter, dan heb je geadviseerd de vorige tutorial te lezen
Databaseconfiguratie
We beginnen met het maken van de zelfstudie-projectdatabase. We zullen een eenvoudige database aanmaken voor het beheren van contactgegevens. We zullen een eenvoudige database maken met twee (2) tabellen met namen van vrienden en steden waarin ze wonen. De relatie tussen vrienden en steden is één-op-één met id in steden als de primaire sleutel en city_id als de externe sleutel in pals-tabellen .
Voer de volgende scripts uit om de database te maken:
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`));
Laten we nu de steden-tabel maken
CREATE TABLE `cities` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(245) DEFAULT NULL,PRIMARY KEY (`id`)) ;
CodeIgniter databasemodellen
We gaan nu modellen maken voor onze database. Het model is het M-deel van de MVC. Het model behandelt gegevenstoegang, gegevensmanipulatie en bedrijfslogica.
In CodeIgniter moet elk model de methoden definiëren die het ondersteunt. In plaats van dezelfde code in elk model te herhalen, zullen we profiteren van overerving bij objectgeoriënteerd programmeren en een bovenliggende modelklasse creëren die de basismethoden definieert die we door onze modellen willen ondersteunen.
De onderstaande tabel toont de methoden die we zullen definiëren en hoe gegevens zullen worden benaderd.
S / N | Methode | Omschrijving |
1 | __construct | Definieert de constructormethode die de bovenliggende constructormethode aanroept |
2 | alles krijgen | Haalt alle velden en records zonder voorwaarden op uit de database |
3 | get_by_id | Haalt een enkele rij op uit de database met behulp van de primaire sleutel van het INT-type genaamd id |
4 | get_where | Haalt alle velden op uit de database op basis van de criteria gebaseerd op |
5 | invoegen | Voegt een nieuw record in de database in |
6 | bijwerken | Werkt een bestaand databaserecord bij op basis van de primaire sleutel van het INT-type genaamd id |
7 | verwijderen | Verwijdert een bestaand record uit de database op basis van de primaire sleutel van het INT-type genaamd id |
De volgende afbeelding toont het klassendiagram en hoe de kindmodellen van Pals en Cities zich verhouden tot het bovenliggende model BaseModel.
We zullen twee modellen maken zoals beschreven in de bovenstaande afbeelding
Maak een nieuwe klasse BaseModel aan in application / models / BaseModel.php
Voeg de volgende code toe
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);}}
HIER,
- beschermde $ table = ''; definieert een beschermde variabele met de naam table. Dit wordt ingevuld door de respectieve onderliggende klasse om aan te geven met welke tabel onze basismodelklassemethoden moeten communiceren.
- public function __construct () {…} definieert de constructormethode en voert de constructormethode van de bovenliggende klasse CI_Model uit.
- get_all () {…} gebruikt de databasebibliotheek en de waarde van de variabele $ table om de SELECT-query op onze database uit te voeren.
- get_by_id ($ id) {…} definieert de methode voor het ophalen van een enkele rij uit de database en accepteert een parameter $ id die van het INT-gegevenstype zou moeten zijn.
- get_where ($ where) {…} definieert de methode get waarmee u een where-clausule kunt instellen.
- insert ($ data) {…} definieert de invoegmethode en accepteert de arrayparameter $ data die de waarden bevat die naar de database moeten worden geschreven.
- update ($ id, $ data) {…} definieert de updatemethode en accepteert de arrayparameter $ data die de waarden bevat die moeten worden bijgewerkt in de database.
- delete ($ id) {…} definieert de verwijdermethode die een parameter van $ id accepteert die van het gegevenstype INT moet zijn.
nu we klaar zijn met de bovenliggende modelklasse, laten we onze Pals-modellen maken
Maak een nieuw bestand aan in application / models / Pals.php
Voeg de volgende code toe
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();}}
HIER,
- klasse Pals breidt BaseModel uit {…} breidt het bovenliggende model BaseModel uit en maakt automatisch alle methoden die in het BaseModel zijn gedefinieerd, toegankelijk voor de onderliggende klasse.
- beschermde $ table = 'pals'; definieert de tabelnaam die is gekoppeld aan ons bovenliggende model
- __construct () {…} initialiseert de bovenliggende constructor
- openbare functie get_by_id ($ id) {…} overschrijft de get_by_id om een aangepaste implementatie te bieden die specifiek is voor het Pals-model. De zoekopdracht voor get_by_id gebruikt een join om de plaatsnaam uit de tabel met steden op te halen
- openbare functie get_all () {…} overschrijft de get_all-methode om een samenvoegquery tussen pals en steden-tabel te implementeren
Maak een nieuw bestand aan in application / models / Cities.php
HIER,
- beschermde $ table = 'steden'; definieert de modeldatabase-tabel.
Zoals u kunt zien aan de hand van de bovenstaande code, bespaart Inheritance ons veel tijd bij het werken met modellen in CodeIgniter. In de volgende sectie zullen we leren
Contact Manager-controllers
Nu we de modellen hebben gemaakt, gaan we de controllers voor onze applicatie maken. We zullen twee controllers hebben, namelijk Contacten en Steden
Laten we beginnen met steden
Maak een nieuw bestand Cities.php aan in de directory application / controllers
Voeg de volgende code toe
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'));}}
HIER,
- De bovenstaande code implementeert alle methoden die nodig zijn om rijen uit de database te maken, bij te werken, te verwijderen en te lezen.
Maak een ander bestand Contacts.php in applicatie / controllers
Voeg de volgende code toe
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'));}}
Weergaven van contactpersonenbeheer
We hebben in de vorige tutorials al gekeken naar formulieren en validatie in CodeIgniter. We zullen de code gebruiken die we in de vorige tutorials hebben ontwikkeld. Voor de volledigheid zullen we de code reproduceren die we in de vorige tutorials hebben gemaakt.
De standpunten van onze applicatie zijn als volgt
U kunt de code voor de bovenstaande weergaven downloaden door op de onderstaande link te klikken
CodeIgniter Contacten Manager Weergaven Download
Overzicht
In deze tutorial leert u hoe u modellen maakt in CodeIgniter. We hebben gebruik gemaakt van overerving in objectgeoriënteerd programmeren om de herbruikbaarheid van code te bevorderen door een basismodel te maken dat de vier belangrijkste databasebewerkingen van invoegen, lezen, bijwerken en verwijderen implementeert.
We hebben de concepten gedemonstreerd met behulp van een praktische applicatie, en we zullen dit in de volgende tutorials blijven doen door meer functionaliteit aan de applicatie toe te voegen.