CodeigniterGenelPHPVeritabanı

Codeigniter Active Record – Veritabanı İşlemleri

activerecord

Merhaba arkadaşlar, sizlere bu yazımda Codeigniter veritabanı işlemlerinden bahsedeceğim. CI içerisinde Active Record ile bu işlemleri gerçekleştireceğiz. Öncelikle bu işlemleri gerçekleştirmek için bir veritabanına ihtiyaç duyacağız. Basit bir senaryo üzerinden kısa bir veritabanı hazırladım sizin için. Filmler, bu filmlere ait oyuncular ve filmlerin türlerini içerisinde barındıran bir veritabanıdır. Veritabanına buradan ulaşabilirsiniz. Bu veritabanını phpMyAdmin içerisinden import ederek başlayabilirsiniz.

Ekran Resmi 2016-02-16 13.21.06

Hızlı bir şekilde veritabanından bahsedelim. Burada prefix olarak test_ belirledim. test_film tablosu film isimlerini ve basit özelliklerini tutmaktadır. oyuncu tablosu oyuncuların listelendiği, kadro ise hangi filmde hangi oyuncuların olduğunu tutmaktadır. Diğer tablolar da yine ayrıntılardır. Öncelikle veritabanı bağlantımızı kontrol edelim, ardından Active Record ile işlemlerimize başlayalım. Bir önceki derste gösterdiğimiz Codeigniter ilk ayarlar dosyaları içerisindeki database.php dosyasıyla bu düzenlemeyi yapacağız. O yüzden o başlattığımız Codeigniter projesi üzerinden ilerleyebiliriz.

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
  'dsn'	=> '',
  'hostname' => 'localhost',
  'username' => 'root',
  'password' => 'root',
  'database' => 'filmarsivi',
  'dbdriver' => 'mysqli',
  'dbprefix' => 'test_',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'encrypt' => FALSE,
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE
);

database.php dosyası içerisinde sunucu, kullanıcı, şifre ve veritabanı bilgileri yanı sıra, active_record = TRUE olarak yapmamız gerekiyor. Ayrıca tabloların başına koyduğumuz prefix’i burada belirtirsek tablolarla işlem yaparken tekrar yazmamıza gerek kalmayacak. dbprefix = test_ olarak değiştirelim ve kaydedelim. Artık Active Record  ile veritabanı işlemlerini gerçekleştirebiliriz. Projemiz içerisinde application > models içerisine (bu benim kullanımım) her tablo işlemlerimiz için bir sınıf oluşturuyoruz. Örneğin tek bir tablo içerisinde Active Record metotlarını görelim, test_oyuncu tablosu için sınıfımızı oluşturalım. Prefixi yazmadan, oyuncumodel.php dosyası oluşturup dosyayı açalım. Aşağıdaki şekilde sınıfımızın ismini ve CI_Model ‘den aldığı kalıtımı yazıyoruz. Şuan Active Record işlemlerimiz için bu tablomuz hazır.

<?php

  class OyuncuModel extends CI_Model
  {
    
    function OyuncuModel(){
      parent::__construct();
    }
    
  }

?>
  •  Insert İşlemleri :
/**
     * Oyuncu kayıt işlemi yapar : INSERT İŞLEMİ
     * @param  [type] $arrOyuncu : kayıt edilecek yeni oyuncunun bilgileridir.
     * @return [type]            [description]
     */
    function oyuncuKayit($arrOyuncu){
      //insert işleminde birinci parametre tablo adıdır,
      //ikinci parametre ise gönderilen satırın bilgileridir.
      //burada oyuncu tablosundaki sütunlara göre dizi oluşturduk
      //ve tablomuza gönderdik.
      $this->db->insert('oyuncu',$arrOyuncu);
    }

    /**
     * Birden fazla kayıt için kullanılır, ginderilen parametre,
     * içerisinde kayıt edilecek verileri bulunduran dizidir.
     * Dizi içerisinde dizi.
     * @param  [type] $arrOyuncular [description]
     * @return [type]               [description]
     */
    function oyuncularKayit($arrOyuncular){
      $this->db->insert_batch('oyuncu',$arrOyuncular);
    }

    /**
     * Burada da kayıt etmek istediğimiz sutunları kayıt edebiliriz.
     * @param  [type] $adi  [description]
     * @param  [type] $dt   [description]
     * @param  [type] $ulke [description]
     * @param  [type] $puan [description]
     * @return [type]       [description]
     */
    function oyuncuSutunOlarakKayit($adi,$dt,$ulke,$puan){
      $this->db->set('oyuncuadi',$adi);
      $this->db->set('oyuncudt',$dt);
      $this->db->set('oyuncuulke',$ulke);
      $this->db->set('oyuncupuan',$puan);
      $this->db->insert('oyuncu');
    }
  • SELECT İşlemleri :
/**
     * Tablodaki tüm verileri getirir.
     * @return [type] [description]
     */
    function getSelect(){
      $sonuc = $this->db->get('oyuncu');
      //get içerisinde ('oyuncu', 2) oalrak kullanırsak limit 2 olur.
      //İşlem sonucunda bir dizi döner. Yapısı farklıdır,
      //burada bize gerekli olan result() sonuclarıdır.
      //İşlem sonucunda result() verilerini göndereceğiz.
      //result() dizisi içerisinde nesneler yer almaktadır. 
      if($sonuc->num_rows() > 0){
        //Eğer veri bulunduysa, sonuçları göndereceğiz.
        return $sonuc->result();
      }else{
        //Yoksa false döndüreceğiz.
        return FALSE;
      }
    }

    /**
     * Select ile veri çekme işlemi.
     * @return [type] [description]
     */
    function selectSelect(){
      //Select metodu istediğimiz sütunları çekmemizi sağlar.
      $this->db->select('oyuncuadi');
      $sonuc = $this->db->get('oyuncu');
      return($sonuc->num_rows() > 0) ? $sonuc->result() : FALSE;
    }

Select işlemleri içerisinde kullanımı değişmeden farklı metotları da kullanabilirsiniz. Onlarıda burada gösterelim.

$this->db->select_max(‘oyuncupuan’); //Oyuncu puanı en yüksek olan veriyi getirir.

$this->db->select_min(‘oyuncupuan); //Oyuncu puanı en düşük olan veriyi getirir.

$this->db->select_avg(‘oyuncupuan); //Oyuncu puan ortalamasını getirir.

$this->db->select_sum(‘oyuncupuan); //Oyuncu puan toplamını getirir.

$this->db->from(‘oyuncu’) metodunu kullanırsak bir sonraki satırda get() içerisine tablo adı yazmamıza gerek kalmaz.

 

  • JOIN İşlemleri :
function joinMetod(){
      //Oyuncu ülke sütunu ülke tablosuyla ilişkilidir.
      //Burada bir join uygulayabiliriz.
      //koşuldan sonra virgül koyarak LEFT join yapabiliriz.
      $this->db->join('ulke','ulke.id = oyuncu.oyuncuulke');
      $sonuc = $this->db->get('oyuncu');
      return($sonuc->num_rows() > 0) ? $sonuc->result() : FALSE;
    }

Join işlemleri ardı ardına istediğiniz kadar yapabilirsiniz. Yine ilk satıra select yazarak istenen sütunları filtreleyebilirsiniz.

  • WHERE İşlemleri :
function whereMetods($oyuncuismi){
      //1.Yöntem
      $this->db->where('oyuncuid',1); //Oyuncu id'si 1 olan getirilir.
      //2.Yöntem
      $this->db->where('oyuncuadi !=', $oyuncuismi);
      //3.Yöntem(dizi şeklinde verilerin parametre olarak geldiğini düşünelim.)
      $arr = array('oyuncuid' => $id, 'oyuncuadi' => $isim, 'oyuncuulke' => $ulke);
      $this->db->where($arr);
      //4.Yöntem (Serbest koşul)
      $kosul = "oyuncuid=1 AND oyuncuadi='boss' OR oyuncuulke=2";
      $this->db->where($kosul);
      //OR_WHERE yöntemi:
      $this->db->where('oyuncuadi !=', $isim);
      $this->db->or_where('oyuncuid >', $id); //..where oyuncuadi != $isim or oyuncuid > $id
      //WHERE_IN yöntemi: Dizi içerisindeki tüm veriler olabilir.
      //Aynısı NOT IN için de kullanılabilir : where_not_in
      $arrID = array(1,2,4,6);
      $this->db->where_in('oyuncuid',$arrID);

      //Verileri getirelim;
      $sonuc = $this->db->get('oyuncu');
      return($sonuc->num_rows() > 0) ? $sonuc->result() : FALSE;
    }

Where işlemleri CI içerisinde çok esnek şekilde kolaylaştırılarak kullanıma sunulmuştur. Bunları bir arada kullanarak çeşitli sorgular oluşturulabilir.

  • LIKE İşlemleri :
function likeMetods(){
      //1.Yöntem : where oyuncuadi LIKE %oguzhan%
      $this->db->like('oyuncuadi', 'oguzhan'); 
      //2.Yöntem : where oyuncuadi LIKE %oguzhan
      $this->db->like('oyuncuadi', 'oguzhan','before'); 
      //3.Yöntem : where oyuncuadi LIKE oguzhan%
      $this->db->like('oyuncuadi', 'oguzhan','after'); 
      //4.Yöntem : where oyuncuadi LIKE %oguzhan%
      $this->db->like('oyuncuadi', 'oguzhan','both'); 
      //5.Yöntem : where oyuncuadi LIKE oguzhan
      $this->db->like('oyuncuadi', 'oguzhan','none'); 
      //6.Yöntem : where oyuncuadi LIKE %oguzhan% and oyuncuulke LIKE %2%
      $arr = array('oyuncuadi'=>'oguzhan', 'oyuncuulke'=>2);
      $this->db->like($arr); 
    }

Like işlemleri seçime göre değişiklik göstermektedir. Ayrıca or_like, not_like, or_not_like metodları da bu şekilde kullanılmaktadır.

  • GROUP BY, DISTINCT & ORDER BY İşlemleri :
function groupDistinctOrder(){
      //GROUP BY 1:
      $this->db->group_by('oyuncuulke');
      //GROUP BY 2: çoklu gruplama
      $arr = array('oyuncuadi','oyuncuulke');
      $this->db->group_by($arr);
      //DISTINCT :
      $this->db->distinct();
      //ORDER_BY : Ayrı ayrı da yazılabilir tek satırda da yazılabilir 
      $this->db->order_by('oyuncuadi DESC, oyuncuid ASC');
    }
  •  UPDATE İşlemi :

Update işlemi değiştirilmek istenen sütunların ve verilerin bir arada gönderilmesiyle gerçekleştirilir.

function updateMetods($id){
      $data = array(
               'oyuncuadi' => $isim,
               'oyuncuulke' => $ulke);

      $this->db->where('oyuncuid', $id);
      $this->db->update('oyuncu', $data);
      //Yukarıdaki işlemde data arrayi içerisindeki sütunlar update edilmiştir.
      //Where sorgusunda da hangi veri değiştirileceği belirtilmiştir.
      //Diğer kullanımı ise;
      $this->db->update('oyuncu',$data,array('oyuncuid' => 2));
    }

 

Evet arkadaşlar son olarakta tablo temizleme ve veri silme metodlarında bahsedip proje kodlarını sizlerle paylaşacağım.

$this->db->empty_table(‘oyuncu’); // Tabloyu temizler;

$this->db->truncate(‘oyuncu’); //Tabloyu temizler, id’ler 0’dan başlar.

$this->db->delete(‘oyuncu’, array(‘oyuncuid’ => $id)); //ilgili id’ye sahip satırı tablodan kaldırır.

 

Burada bahsettiğim tüm metodların controller içerisinde kullanımıda dahil olmak üzere, linkte bulunan projede sizlerle paylaştım. Sorularınız için ogzhnozdmr@gmail.com’dan ulaşabilirsiniz.. Bir sonraki yazımızda basit bir proje geliştireceğiz.  İyi çalışmalar arkadaşlar..

 

Oğuzhan ÖZDEMİR

19 Ocak 1991 Bursa doğumlu Bilgisayar Mühendisiyim. Codeigniter, Kotlin, Android, MySQL ve iOS uygulamalar geliştiriyorum. Web kısmında CSS, HTML, JavaScript, jQuery konularına hakimim. Mayıs 2017 tarihinde Maltepe/İstanbul oradan da Çorlu /Tekirdağ'a giderek askerlik görevimi tamamladım. 2018 Mayıs ayında Bursa'da Durmazlar Makina Sanayi ve Tic. A.Ş. firmasında Bilgi Teknolojileri Uzman Yardımcısı olarak işe başladım. İletişim: ogzhnozdmr@gmail.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.