CodeIgniter Database: Konfiguration, Rediger, Opdater, Slet data

Codeigniter-database

I den forrige tutorial har vi dรฆkket det grundlรฆggende i CodeIgniter active record og hvordan man indsรฆtter, opdaterer, sletter og lรฆser poster fra databasen. I denne รธvelse vil vi oprette databasemodeller og bruge formularer til at oprette og opdatere databaseposter. hvis du er helt ny til at arbejde med databaser i CodeIgniter, sรฅ rรฅdede du til at lรฆse den forrige tutorial

Codeigniter-databasekonfiguration

Vi starter med at oprette tutorial-projektdatabasen. Vi opretter en simpel database til hรฅndtering af kontaktoplysninger. Vi vil oprette en simpel database med to (2) tabeller med navne pรฅ venner og byer, som de bor i. Forholdet mellem venner og byer er en-til-en med id i byer som primรฆrnรธgle og city_id som fremmednรธgle i pals-tabeller .

Kรธr fรธlgende scripts for at oprette 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`)
);

Lad os nu oprette bytabellen

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

CodeIgniter-databasemodeller

Vi vil nu lave modeller til vores database. Modellen er M-delen af MVC. Modellen omhandler dataadgang, datamanipulation og forretningslogik.

I CodeIgniter skal hver model definere de metoder, den vil understรธtte. I stedet for at gentage den samme kode i hver model, vil vi drage fordel af arv i objektorienteret programmering og skabe en overordnet modelklasse, der vil definere de grundlรฆggende metoder, som vi รธnsker, at vores modeller skal understรธtte.

Tabellen nedenfor viser de metoder, vi vil definere, og hvordan der vil blive tilgรฅet data.

S / N Metode Beskrivelse
1 __konstruere Definerer konstruktรธrmetoden, der kalder den overordnede konstruktรธrmetode
2 fรฅ_alt Henter alle felter og poster fra databasen uden betingelser
3 get_by_id Henter en enkelt rรฆkke fra databasen ved hjรฆlp af den primรฆre nรธgle af INT-typen med navnet id
4 get_where Henter alle felter fra databasen baseret pรฅ de baseret i kriterier
5 INSERT Indsรฆtter en ny post i databasen
6 opdatering Opdaterer en eksisterende databasepost baseret pรฅ den primรฆre nรธgle af INT-typen med navnet id
7 slette Sletter en eksisterende post fra databasen baseret pรฅ den primรฆre nรธgle af INT-typen med navnet id

Fรธlgende billede viser klassediagrammet, og hvordan Pals og Cities underordnede modeller relaterer sig til den overordnede model BaseModel.

CodeIgniter-databasemodeller

Vi vil skabe to modeller som beskrevet i ovenstรฅende billede

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

Tilfรธj 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 med navnet tabel. Dette vil blive udfyldt af den respektive underordnede klasse for at angive, hvilken tabel vores basismodelklassemetoder skal interagere med.
  • public funktion __construct() {...} definerer konstruktormetoden og udfรธrer konstruktormetoden for den overordnede klasse CI_Model.
  • get_all() {...} bruger databasebiblioteket og vรฆrdien af โ€‹โ€‹variablen $table til at kรธre SELECT-forespรธrgslen mod vores database.
  • get_by_id($id) {...} definerer metoden til at hente en enkelt rรฆkke fra databasen og accepterer en parameter $id, der skal vรฆre af INT-datatypen.
  • get_where($where) {...} definerer get-metoden, der tillader dig at sรฆtte en where-klausul.
  • insert($data) {โ€ฆ} definerer insert-metoden og accepterer array-parameteren $data, der indeholder de vรฆrdier, der skal skrives til databasen.
  • update($id, $data) {...} definerer opdateringsmetoden og accepterer array-parameteren $data, der indeholder de vรฆrdier, der skal opdateres i databasen.
  • delete($id) {...} definerer slettemetoden, der accepterer en parameter af $id, der skal vรฆre af datatypen INT.

nu hvor vi er fรฆrdige med den overordnede modelklasse, lad os skabe vores Pals-modeller

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

Tilfรธj 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 udvider BaseModel {...} udvider den overordnede model BaseModel og gรธr automatisk alle de metoder, der er defineret i BaseModel, tilgรฅet til den underordnede klasse.
  • beskyttet $table = 'venner'; definerer tabelnavnet forbundet med vores overordnede model
  • __construct() {...} initialiserer den overordnede konstruktรธr
  • offentlig funktion get_by_id($id) {...} tilsidesรฆtter get_by_id for at give tilpasset implementering, der er specifik for Pals-modellen. Forespรธrgslen til get_by_id bruger en join til at hente bynavnet fra bytabellen
  • offentlig funktion get_all() {...} tilsidesรฆtter get_all-metoden til at implementere en joinforespรธrgsel mellem pals og by-tabellen

Opret 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 modeldatabasetabellen.

Som du kan se af den ovenfor givne kode, sparer Arv os for en masse tid, nรฅr vi arbejder med modeller i CodeIgniter. I nรฆste afsnit lรฆrer vi

Kontakter Manager-controllere

Nu hvor vi har skabt modellerne, lad os skabe controllerne til vores applikation. Vi vil have to controllere, nemlig kontakter og byer

Lad os starte med byer

Opret en ny fil Cities.php i application/controllers bibliotek

Tilfรธj 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,

Ovenstรฅende kode implementerer alle de metoder, der er nรธdvendige for at oprette, opdatere, slette og lรฆse rรฆkker fra databasen.

Opret endnu en fil Contacts.php i applikation/controllere

Tilfรธj 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'));
    }
}

Kontaktadministratorvisninger

Vi har allerede set pรฅ formularer og validering i CodeIgniter i de tidligere tutorials. Vi vil bruge den kode, som vi udviklede i de tidligere tutorials. For fuldstรฆndighedens skyld vil vi gengive den kode, vi oprettede i de tidligere tutorials.

Synspunkterne i vores ansรธgning vil vรฆre som fรธlger

Kontaktadministratorvisninger

Du kan downloade koden til ovenstรฅende visninger ved at klikke pรฅ linket nedenfor

CodeIgniter Contacts Manager Views Download

Resumรฉ

I denne tutorial lรฆrer du, hvordan du opretter modeller i CodeIgniter. Vi udnyttede arv i objektorienteret programmering til at fremme genanvendelighed af kode ved at skabe en basismodel, der implementerer de fire store databaseoperationer med indsรฆttelse, lรฆsning, opdatering og sletning.

Vi har demonstreret koncepterne ved hjรฆlp af en praktisk applikation, og det vil vi fortsรฆtte med i de nรฆste tutorials ved at tilfรธje mere funktionalitet til applikationen.

Opsummer dette indlรฆg med: