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 Tekniske beskrivelser
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

Sammendrag

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.

Oppsummer dette innlegget med: