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

Codeigniter Veritabanı

Önceki eğitimde CodeIgniter aktif kaydının temellerini ve veritabanından kayıtların nasıl ekleneceği, güncelleneceği, silineceği ve okunacağı konusunu ele aldık. Bu eğitimde veritabanı modelleri oluşturacağız ve veritabanı kayıtlarını oluşturmak ve güncellemek için formları kullanacağız. CodeIgniter'da veritabanlarıyla çalışma konusunda tamamen yeniyseniz, önceki eğitimi okumanızı tavsiye etmişsinizdir.

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.

CodeIgniter'da her modelin destekleyeceği yöntemleri tanımlaması gerekir. Her modelde aynı kodu tekrarlamak yerine nesne yönelimli programlamada kalıtım avantajından yararlanacağız ve modellerimizin desteklemesini istediğimiz temel yöntemleri tanımlayacak bir ebeveyn 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ıda verilen koddan da görebileceğiniz gibi Inheritance, CodeIgniter'daki modellerle çalışırken bize çok zaman kazandırıyor. 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

Önceki eğitimlerde CodeIgniter'daki formlara ve doğrulamaya zaten bakmıştık. Önceki derslerde geliştirdiğimiz kodu kullanacağız. Eksiksiz olması açısından önceki derslerde oluşturduğumuz kodu yeniden oluşturacağız.

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şiler Yöneticisi Görüntüleme İndirme

ÖZET

Bu eğitimde, modellerin nasıl oluşturulacağını öğreneceksiniz. CodeIgniterNesne 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.