CodeIgniter-database: gegevens configureren, bewerken, bijwerken en verwijderen

Codeigniter-database

In de vorige tutorial hebben we de basisprincipes van CodeIgniter actieve records besproken en hoe records uit de database kunnen worden ingevoegd, bijgewerkt, verwijderd en gelezen. 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 raad je aan de vorige tutorial te lezen

Codeigniter-databaseconfiguratie

We beginnen met het maken van de tutorialprojectdatabase. We zullen een eenvoudige database maken voor het beheren van contactpersonentails. We zullen een eenvoudige database maken met twee (2) tabellen met namen van pals en de steden waarin ze wonen. De relatie tussen pals 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 het volgende uitwing scripts 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 stedentabel 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 voor onze database maken. Het model is het M-gedeelte 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 laten ondersteunen.

De onderstaande tabel toont de methoden die we zullen definiëren en hoe toegang zal worden verkregen tot de gegevens.

S / N Methode Omschrijving
1 __constructie Definieert de constructormethode die de bovenliggende constructormethode aanroept
2 alles krijgen Haalt zonder enige voorwaarden alle velden en records uit de database op
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 haal_waar Haalt alle velden uit de database op basis van de basiscriteria
5 invoegen Voegt een nieuw record in de database in
6 -update 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 following afbeelding toont het klassendiagram en hoe de kindermodellen van Pals en Cities zich verhouden tot het bovenliggende model BaseModel.

CodeIgniter-databasemodellen

We zullen twee modellen maken zoals beschreven in de bovenstaande afbeelding

Maak een nieuwe klasse BaseModel in application/models/BaseModel.php

Voeg de volgende toewing code

<?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);
    }
}

HIER,

  • beschermd $tabel = ”; definieert een beschermde variabele met de naam tabel. 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 uit te voeren op onze database.
  • 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 moet zijn.
  • get_where($where) {…} definieert de get-methode 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, kunnen we onze Pals-modellen maken

Maak een nieuw bestand in application/models/Pals.php

Voeg de volgende toewing code

<?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();
    }
}

HIER,

  • class 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.
  • protected $table = 'vrienden'; definieert de tabelnaam die is gekoppeld aan ons bovenliggende model
  • __construct() {…} initialiseert de bovenliggende constructor
  • public function get_by_id($id) {…} overschrijft de get_by_id om aangepaste implementatie te bieden die specifiek is voor het Pals-model. De query voor get_by_id gebruikt een join om de stadsnaam uit de stedentabel op te halen
  • public function get_all() {…} overschrijft de get_all methode om een ​​join-query tussen pals en cities-tabel te implementeren

Maak een nieuw bestand in application/models/Cities.php

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

HIER,

protected $table = 'steden'; definieert de modeldatabasetabel.

Zoals je uit de bovenstaande code kunt zien, bespaart Overerving ons veel tijd bij het werken met modellen in CodeIgniter. In het volgende gedeelte zullen we leren

Contacten Manager Controllers

Nu we de modellen hebben gemaakt, gaan we de controllers voor onze toepassing maken. We zullen twee controllers hebben, namelijk Contacten en Steden

Laten we beginnen met steden

Maak een nieuw bestand Cities.php in de map application/controllers

Voeg de volgende toewing code

<?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'));
    }
}

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 nog een bestand Contacts.php in application/controllers

Voeg de volgende toewing code

<?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'));
    }
}

Contactenbeheerweergaven

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 reproduceren we de code die we in de vorige tutorials hebben gemaakt.

De opvattingen van onze aanvraag zijn als volgt

Contactenbeheerweergaven

U kunt de code voor bovenstaande weergaven downloaden door op de onderstaande link te klikken

CodeIgniter Contacten Manager-weergaven downloaden

Samengevat

In deze zelfstudie leert u hoe u modellen maakt in CodeIgniter. We hebben gebruik gemaakt van overerving bij objectgeoriënteerd programmeren promoherbruikbaarheid van code door een basismodel te creëren dat de vier belangrijkste databasebewerkingen implementeert: invoegen, lezen, bijwerken en verwijderen.

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.