CodeIgniter Veritabanı: Yapılandırma, Düzenleme, Güncelleme, Veri Silme

Codeateşleyici Veritabanı

Önceki derste, temel konuları ele aldık. CodeIgniter Active Record ve veritabanına kayıt ekleme, güncelleme, silme ve okuma işlemleri. Bu eğitimde, veritabanı modelleri oluşturacak ve formları kullanarak veritabanı kayıtları oluşturup güncelleyeceğiz. Veritabanlarıyla çalışmaya tamamen yeniyseniz, bu eğitim size yardımcı olacaktır. CodeIgniter, o zaman önceki eğitime göz atmanızı tavsiye etmiştiniz.

CodeIgniter Veritabanı Yapılandırması

Eğitim projesi veritabanını oluşturarak başlayacağız. İletişim bilgilerini yönetmek için basit bir veritabanı oluşturacağız. pals ve yaşadıkları şehirler adlı iki (2) tablodan oluşan basit bir veritabanı oluşturacağız. pals ve city arasındaki ilişki, cities'deki id'nin birincil anahtar ve city_id'nin pals tablolarındaki yabancı anahtar olmasıyla birebirdir.

Veritabanını oluşturmak için aşağıdaki betikleri çalıştırın:

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`)
);

Şimdi şehirler tablosunu oluşturalım

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

CodeIgniter Veritabanı Modelleri

Şimdi veritabanımız için modeller oluşturacağız. Model, M kısmıdır. MVC. Model veri erişimi, veri manipülasyonu ve iş mantığı ile ilgilidir.

In CodeIgniter'da her modelin destekleyeceği yöntemleri tanımlaması gerekir. Her modelde aynı kodu tekrarlamak yerine, nesne yönelimli programlamadaki kalıtımdan yararlanarak, modellerimizin desteklemesini istediğimiz temel yöntemleri tanımlayacak bir üst model sınıfı oluşturacağız.

Aşağıdaki tablo tanımlayacağımız yöntemleri ve verilere nasıl erişileceğini göstermektedir.

S / N Yöntem Açıklama
1 __yapı Ana yapıcı yöntemini çağıran yapıcı yöntemini tanımlar
2 hepsini al Veritabanındaki tüm alanları ve kayıtları hiçbir koşul olmadan alır
3 get_by_id Kimlik adlı INT türünün birincil anahtarını kullanarak veritabanından tek bir satır alır.
4 get_where Kriterlere dayalı olarak veritabanındaki tüm alanları alır
5 eklemek Veritabanına yeni bir kayıt ekler
6 güncelleştirme id adlı INT türünün birincil anahtarına dayalı olarak mevcut bir veritabanı kaydını günceller
7 silmek id adlı INT türünün birincil anahtarına dayalı olarak mevcut bir kaydı veritabanından siler

Aşağıdaki görsel sınıf diyagramını ve Pals and Cities alt modellerinin ana model BaseModel ile nasıl ilişkili olduğunu göstermektedir.

CodeIgniter Veritabanı Modelleri

Yukarıdaki görselde anlatıldığı gibi iki model oluşturacağız

application/models/BaseModel.php dosyasında yeni bir BaseModel sınıfı oluşturun

Aşağıdaki kodu ekleyin

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

İŞTE,

  • korumalı $tablo = ”; tablo adlı korumalı bir değişkeni tanımlar. Bu, temel model sınıf yöntemlerimizin hangi tabloyla etkileşime girmesi gerektiğini belirtmek için ilgili alt sınıf tarafından doldurulacaktır.
  • public function __construct() {…} yapıcı yöntemini tanımlar ve CI_Model üst sınıfının yapıcı yöntemini yürütür.
  • get_all() {…}, SELECT sorgusunu veritabanımızda çalıştırmak için veritabanı kitaplığını ve $table değişkeninin değerini kullanır.
  • get_by_id($id) {…} veritabanından tek bir satırın alınmasına yönelik yöntemi tanımlar ve INT veri türünde olması gereken $id parametresini kabul eder.
  • get_where($where) {…}, bir Where cümleciği ayarlamanıza izin veren get yöntemini tanımlar.
  • insert($data) {…}, insert yöntemini tanımlar ve veritabanına yazılacak değerleri içeren $data dizi parametresini kabul eder.
  • update($id, $data) {…}, güncelleme yöntemini tanımlar ve veritabanında güncellenecek değerleri içeren $data dizi parametresini kabul eder.
  • delete($id) {…}, INT veri türünde olması gereken $id parametresini kabul eden silme yöntemini tanımlar.

Artık ana model sınıfıyla işimiz bittiğine göre Pals modellerimizi oluşturalım

application/models/Pals.php'de yeni bir dosya oluşturun

Aşağıdaki kodu ekleyin

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

İŞTE,

  • class Pals, BaseModel'i genişletir {…}, BaseModel ana modelini genişletir ve BaseModel'de tanımlanan tüm yöntemlerin alt sınıfa otomatik olarak erişilmesini sağlar.
  • korumalı $tablo = 'arkadaşlar'; ana modelimizle ilişkili tablo adını tanımlar
  • __construct() {…} ana kurucuyu başlatır
  • public işlevi get_by_id($id) {…}, Pals modeline özel özel uygulama sağlamak için get_by_id'yi geçersiz kılar. get_by_id sorgusu, şehirler tablosundan şehir adını almak için bir birleştirme kullanır
  • public işlevi get_all() {…}, arkadaşlar ve şehirler tablosu arasında bir birleştirme sorgusu uygulamak için get_all yöntemini geçersiz kılar

application/models/Cities.php'de yeni bir dosya oluşturun

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

İŞTE,

korumalı $tablo = 'şehirler'; Model veritabanı tablosunu tanımlar.

Yukarıdaki koddan da görebileceğiniz gibi, kalıtım, modellerle çalışırken bize çok zaman kazandırıyor. CodeAteşleyici. Bir sonraki bölümde öğreneceğiz.

Kişi Yöneticisi Denetleyicileri

Artık modelleri oluşturduğumuza göre uygulamamız için kontrolörleri oluşturalım. Kişiler ve Şehirler olmak üzere iki denetleyicimiz olacak

Şehirlerle başlayalım

application/controllers dizininde yeni bir Cities.php dosyası oluşturun

Aşağıdaki kodu ekleyin

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

İŞTE,

Yukarıdaki kod, veritabanındaki satırları oluşturmak, güncellemek, silmek ve okumak için gereken tüm yöntemleri uygular.

Uygulamada/kontrolörlerde başka bir Contacts.php dosyası oluşturun

Aşağıdaki kodu ekleyin

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

Kişi Yöneticisi Görünümleri

Formlar ve doğrulama konusunu daha önce ele aldık. CodeÖnceki eğitimlerde Igniter'ı kullanmıştık. Önceki eğitimlerde geliştirdiğimiz kodu kullanacağız. Eksiksiz olması açısından, önceki eğitimlerde oluşturduğumuz kodu burada tekrar vereceğiz.

Uygulamamızın görünümleri aşağıdaki gibi olacaktır

Kişi Yöneticisi Görünümleri

Yukarıdaki görünümlere ait kodu aşağıdaki bağlantıya tıklayarak indirebilirsiniz.

CodeIgniter Kişi Yöneticisi Görünümleri İndir

ÖZET

Bu eğitimde, modellerin nasıl oluşturulacağını öğreneceksiniz. CodeateşleyiciNesne yönelimli programlamada kalıtımın avantajlarından yararlanarak, ekleme, okuma, güncelleme ve silme olmak üzere dört temel veritabanı işlemini uygulayan bir temel model oluşturduk.

Kavramları pratik bir uygulama kullanarak gösterdik ve sonraki eğitimlerde uygulamaya daha fazla işlevsellik ekleyerek bunu yapmaya devam edeceğiz.

Bu yazıyı şu şekilde özetleyin: