Bu nasıl başa CodeIgniter, modelleri, ve ORM,?

10 Cevap php

Ben CodeIgniter ile başladım ve Google birkaç saat sonra dalış biraz kafam karıştı.

En kolay örnekle sorumu açıklamaya çalışalım: Ben alanlar 'isim' ve 'renk' ile bir tablo 'otomobil' var. Benim kod şöyle nihayet bakmak olabilir ki bu nedenle ben, bir php sınıf Car istiyorum:

$car = new Car('BMW', 'red'); //new $car Object
$car->save(); //this will make an SQL insert to the table 'car'

//Lets query all cars
$cars = Car::get_all(); 
//cars will be an array of Car objects, (not a set of rows!)

Bu nedenle, sana RubyOnRails veya Django (Python) ne var oldukça benzer bir şey arıyorum. Ben ilişkilerin her türlü işlemek için ve gerçek bir OOP + MVC şekilde yazma kod gerekiyor.

Bu almak için benim başarısız yaklaşımlar:

Using an external ORM (DataMapper, Doktrin, AcidCrud ...)

Onlar da çok ayarları gerektirir, ya da kötü bir şekilde ilişkileri ele.

Using CodeIgniter classes (CodeIgniter'ın Model sınıfını genişletmek için)

class Car extends Model{
public function Car($name='',$color='')
{
    $this->name     =   $name;
    $this->color    =   $color;      
    parent::Model();
}
public function save()
{
    $data = array(
                   'name'   =>  $this->name ,
                   'color'  =>  $this->color 
                  );

    $this->db->insert('cars' $data);
}

Ve böylece ... Bu yaklaşım ile sorun olduğunu, bir, ben bu gibi CodeIgniter, gelen bir sürü şey içeren bir $ araba nesnenin var_dump () bakın eğer objeler vb CI_Config, CI_Input, CI_Benchmark, benim sınıf Araba her nesne, bu tekrarlanan verilerin bir sürü içerir çünkü nedenle ben (o kötü performansa sahip olacak!), bu iyi bir çözüm olmadığını düşünüyorum, öyle değil mi?

Not using the CodeIgniter's models

Ben CodeIgniter'ın Model sınıfından onları uzanan ve daha sonra düzenli PHP5 yapıcısı (yerine fonksiyon Araç __construct () ()) kullanmadan benim modellerini yapabilir, ama bu durumda sorun şudur: Ben querys yapmak için $ db nesneye erişmek nasıl CodeIgniter'ın ActiveRecord kullanıyor? ve, ben denetleyicileri dahilinde modelleri (kendi sınıfları) yüklemek nasıl?

10 Cevap

Muhtemelen böyle bir şey istiyorum:

   class Cars {

    //List all neccessary vars here

    function __construct() {
        //get instance of Codeigniter Object and load database library
        $this->obj =& get_instance();
        $this->obj->load->database();
    }

//You can now list methods like so:
function selectCar($name, $color) {

        $this->obj->db->select('color')->from('car')->where('color', $color);
        $query = $this->obj->db->get();

        switch ($query->num_rows()) {
        case 0:
            return false;
            break;
        default:
            return $query->result();
            break;
        }
    }

Umarım ki olur!

Doctrine, büyük bir ORM ve kolayca CodeIgniter'daki entegre edilebilir sahipsiniz.

Bir bir görünüm ORM için CodeIgniter wiki sayfasını almak

http://codeigniter.com/wiki/ORM/

Gelecekteki Googler'ların, here is a tutorial Doktrin 2 ile CodeIgniter'ı 2 entegre konusunda yazdı.

Eğer herhangi bir sorun varsa bana bildirin.

Ben CodeIgniter ile Propel kullanarak iyi bir şans oldu.

check out GAS ORM it sounds pretty good, handy and easy to use. some features of this ORM implementation for CodeIgniter:

  • Desteklenen veritabanları: cubrid, mssql, mysql, oci8, odbc, postgre, sqlite, sqlsrv. (CI repo ile senkronize tutmak eğer, PDO'de dahil)
  • Birden fazla veritabanı bağlantıları destekler.
  • Çoklu ilişkiler destekleyin.
  • (Ilişkileri tanımlamak anahtarı için) kompozit anahtarları destekler.
  • Tersi veritabanı tabloları modelleri otomatik oluşturmak ve.
  • Göçler dosyası oluşturarak modelleri-tabloları otomatik olarak senkronize.
  • Per-istek önbelleğe alma.
  • Özüne ve komşuluk sütun / veri (hiyerarşik veri).
  • İlişkiniz sorguları (performans tarzda için) en üst düzeye çıkarmak için istekli yükleniyor.
  • Çeşitli bulucu yöntemler ve agrega (CI AR çoğu ile zincirleme olabilir).
  • Minimal kurulum ile doğrulama ve otomatik haritalama giriş koleksiyonu.
  • Kancalar model üzerinde kontrol işaret.
  • Modeliniz genelinde yaygın fonksiyonu / kütüphanesi paylaşmak uzantıları.
  • İşlemler ve diğer CI AR iyilik.
  • API tutarlılık çoğu sağlamak için phpunit test paketi dahil.

kıvılcım desteği ile bir form var -> yüzden yüklemek kolaydır

Ne yapmak istediğiniz ActiveRecord sınıfını genişleten bir kütüphane oluşturmaktır. Bazı insanlar önünüzde şunlardır:

http://codeigniter.com/wiki/ActiveRecord_Class/

Burada ipliği, iyi mods:

http://codeigniter.com/forums/viewthread/101987/

Eğer app geneldir ORM yöntemler arıyorsanız, sadece ActiveRecord sınıfını genişletmek. Benim uygulama için, bir tablonun yapısını bilerek beni (otomatik oluşturma) formları iskelesi ve diğer haritalama yapmak için izin verir. Ben API-to-API haritalama yapmak, bu yüzden MyActiveRecord bir GetStructure () yöntemini içerir ve oradan başka şeyler inşa.

(RoR gülüp geç ikileyin)

Ben Doktrini kapsamı ve gücünden bir fanatiğiyim süre Edit:, ben CI ruhu ötesinde komut satırı kullanımı yerlerde bu talep olduğunu düşünüyorum. Ne sizin için doğru sizin için doğru olan şey, ama ben Doktrini kullanmak için gidiyorum, ben de doğru, Symfony kullanabilirsiniz? Ya RoR, bu konuda, doğru? Ben bu ile gong ben nerede olduğuna bakın? Doğru zaman doğru araçtır.

Ben uskur ile CodeIgniter'ı kullanılan ve gerçekten de karışık. Bir süre böyle kullanılan ve bu şekilde çalışan birkaç webapps var. Ben bunu yapmak için birkaç korkunç yollarını buldu beri (bazı Apache yapılandırma modifiying dahil!). Bunu yapmak için nasıl bir blog yazısı yayınlamaya karar verdi. Bunu okumak here. Olabilir

Ben yardımcı olabilir umut!

Php-activerecord çok iyi bir drop-in ORM olduğunu düşünüyorum. Ben Slim Framework ile bir kaç kez kullandım ve bunu CI yerli modeli sınıfını kullanarak harika bir alternatif olacağını düşünüyorum. İşte bazı örnek kod ve link:

$post = new Post();
$post->title = 'My first blog post!!';
$post->author_id = 5;
$post->save();

PHP ActiveRecord

Ben bu oldukça eski olduğunu biliyorum, ama şimdi CodeIgniter'ı kullanarak ve onunla bir ORM kullanmak wannt olanlar için CodeIgniter ile itmek entegre etmek bu öğretici kullanabilirsiniz

http://llanalewis.blogspot.com/2013/06/installing-propel-in-codeigniter.html