CodeIgniter Database: Konfigurasjon, Rediger, Oppdater, Slett data

Codeigniter-database

I den forrige opplæringen har vi dekket det grunnleggende om CodeIgniter active record og hvordan du setter inn, oppdaterer, sletter og leser poster fra databasen. I denne opplæringen vil vi lage databasemodeller og bruke skjemaer for å opprette og oppdatere databaseposter. hvis du er helt ny på å jobbe med databaser i CodeIgniter, rådet du til å lese den forrige opplæringen

Kodeigniter-databasekonfigurasjon

Vi starter med å lage opplæringsprosjektdatabasen. Vi vil lage en enkel database for å administrere kontaktdetaljer. Vi vil lage en enkel database med to (2) tabeller med navn på venner og byer som de bor i. Forholdet mellom venner og byer er en-til-en med id i byer som primærnøkkel og city_id som fremmednøkkel i pals-tabeller .

Kjør følgende skript for å lage 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`)
);

La oss nå lage bytabellen

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

CodeIgniter-databasemodeller

Vi skal nå lage modeller for databasen vår. Modellen er M-delen av MVC. Modellen omhandler datatilgang, datamanipulering og forretningslogikk.

I CodeIgniter må hver modell definere metodene den skal støtte. I stedet for å gjenta den samme koden i hver modell, vil vi dra nytte av arv i objektorientert programmering og lage en overordnet modellklasse som vil definere de grunnleggende metodene som vi ønsker at modellene våre skal støtte.

Tabellen nedenfor viser metodene som vi vil definere og hvordan data vil få tilgang.

S / N Metode Description
1 __konstruere Definerer konstruktørmetoden som kaller den overordnede konstruktørmetoden
2 få_alt Henter alle felt og poster fra databasen uten betingelser
3 get_by_id Henter en enkelt rad fra databasen ved å bruke primærnøkkelen av INT-typen kalt id
4 komme_hvor Henter alle felt fra databasen basert på basert i kriteriene
5 Sett Setter inn en ny post i databasen
6 Oppdater Oppdaterer en eksisterende databasepost basert på primærnøkkelen av INT-typen kalt id
7 slette Sletter en eksisterende post fra databasen basert på primærnøkkelen av INT-typen kalt id

Følgende bilde viser klassediagrammet og hvordan Pals and Cities underordnede modeller forholder seg til den overordnede modellen BaseModel.

CodeIgniter-databasemodeller

Vi vil lage to modeller som beskrevet i bildet ovenfor

Opprett en ny klasse BaseModel i application/models/BaseModel.php

Legg til følgende kode

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

HER,

  • beskyttet $table = ”; definerer en beskyttet variabel kalt tabell. Dette vil fylles ut av den respektive barneklassen for å spesifisere hvilken tabell våre basismodellklassemetoder skal samhandle med.
  • offentlig funksjon __construct() {...} definerer konstruktørmetoden og utfører konstruktørmetoden til den overordnede klassen CI_Model.
  • get_all() {...} bruker databasebiblioteket og verdien til variabelen $table for å kjøre SELECT-spørringen mot databasen vår.
  • get_by_id($id) {...} definerer metoden for å hente en enkelt rad fra databasen og aksepterer en parameter $id som skal være av INT-datatypen.
  • get_where($where) {...} definerer get-metoden som lar deg sette en where-klausul.
  • insert($data) {...} definerer insert-metoden og aksepterer array-parameteren $data som inneholder verdiene som skal skrives til databasen.
  • update($id, $data) {...} definerer oppdateringsmetoden og godtar array-parameteren $data som inneholder verdiene som skal oppdateres i databasen.
  • delete($id) {...} definerer slettemetoden som godtar en parameter for $id som skal være av datatypen INT.

nå som vi er ferdige med den overordnede modellklassen, la oss lage våre Pals-modeller

Opprett en ny fil i application/models/Pals.php

Legg til følgende kode

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

HER,

  • klasse Pals utvider BaseModel {...} utvider den overordnede modellen BaseModel og gjør automatisk alle metodene som er definert i BaseModel tilgang til barneklassen.
  • beskyttet $table = 'venner'; definerer tabellnavnet knyttet til vår overordnede modell
  • __construct() {...} initialiserer den overordnede konstruktøren
  • offentlig funksjon get_by_id($id) {...} overstyrer get_by_id for å gi tilpasset implementering spesifikk for Pals-modellen. Spørringen for get_by_id bruker en sammenføyning for å hente bynavnet fra bytabellen
  • offentlig funksjon get_all() {...} overstyrer get_all-metoden for å implementere en sammenføyningsspørring mellom venner og bytabeller

Opprett en ny fil i application/models/Cities.php

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

HER,

beskyttet $table = 'byer'; definerer modelldatabasetabellen.

Som du kan se fra koden ovenfor, sparer Arv oss for mye tid når vi jobber med modeller i CodeIgniter. I neste avsnitt skal vi lære

Kontaktadministratorkontrollere

Nå som vi har laget modellene, la oss lage kontrollerene for applikasjonen vår. Vi vil ha to kontrollere, nemlig kontakter og byer

La oss starte med byer

Opprett en ny fil Cities.php i program/kontrollere-katalogen

Legg til følgende kode

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

HER,

Koden ovenfor implementerer alle metodene som trengs for å opprette, oppdatere, slette og lese rader fra databasen.

Opprett en annen fil Contacts.php i applikasjon/kontrollere

Legg til følgende kode

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

Visninger for kontaktbehandler

Vi har allerede sett på skjemaer og validering i CodeIgniter i de tidligere veiledningene. Vi vil bruke koden som vi utviklet i de forrige veiledningene. For fullstendighetens skyld vil vi reprodusere koden vi opprettet i de forrige opplæringene.

Synspunktene til søknaden vår vil være som følger

Visninger for kontaktbehandler

Du kan laste ned koden for visningene ovenfor ved å klikke på lenken nedenfor

CodeIgniter Contacts Manager Views Last ned

Oppsummering

I denne opplæringen lærer du hvordan du lager modeller i CodeIgniter. Vi benyttet oss av arv i objektorientert programmering for å fremme gjenbruk av kode ved å lage en basismodell som implementerer de fire store databaseoperasjonene innsetting, lesing, oppdatering og sletting.

Vi har demonstrert konseptene ved hjelp av en praktisk applikasjon, og vi skal fortsette å gjøre det i de neste veiledningene ved å legge til mer funksjonalitet til applikasjonen.