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 Description
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.