PHP ORM çerçeve kullanmak için en kolay nedir?

10 Cevap php

Ben PHP için Ruby'nin Aktif kayıt için arıyorum. Ben sadece benim alanları tanımlamak baz ORM sınıfını genişletmek, ve ben ücretsiz ASİT operasyonlarını almak o kadar basit bir şey. Ben herhangi bir kod yazmadan varsayılan alıcı ve ayarlayıcıları olsun, ancak varsayılan bir alıcı ya da ayarlayıcı geçersiz kılma istiyorum davranışları ile olsun $ fieldName veya set $ fieldName işlevlerini bildirmek kadar kolay olmalıdır. Senfoni Nesne başına yaklaşık 5 dosyaları oluşturmak yapar ve tüm tanımlı nesneler her zaman bildiğim kadarıyla söyleyebilirim yükleyin. Daha iyi bir alternatif nedir? Neden daha iyi? Eğer cevap basit örnekler lütfen koyabilir miyim?

Doktrin Ben senfoni yanında baktım başka bir ORM olduğunu. Ayrıca, veri yapılarını tanımlamak yaml dosyaları oluşturmak için ihtiyaç vardır. Veritabanı zaten bu şeyleri tanımlar. Ne sadece her yerde oluşturmak ve saklamak yapılandırma dosyaları kalmadan benim masa defs okuyacak?

10 Cevap

Her iki CodeIgniter (http://codeigniter.com/user_guide/database/active_record.html) ve PHP5 sadece çatal Kohana (http://docs.kohanaphp.com/libraries/orm) ActiveRecord Desenin uygulamaları içerir.

I Doctrine Symfony'nin varsayılan ORM Propel yerine olacak bir tam özellikli ORM olan büyük bir hayranı değilim.

Bu ben harika buldum tam özellikli bir sorgu oluşturucu ile birlikte beklediğiniz temel ORM şeyler var.

Bu veritabanlarını yönetmek için komut satırı araçları tam bir paketi ile geliyor. Örneğin, YAML içinde şemalar ve demirbaşlar oluşturabilirsiniz Doktrin sizin şema dayalı sınıfları oluşturmak var, veritabanı oluşturmak, modellere dayalı şema oluşturmak, sonra tek bir {[(0) ile tüm armatürleri ile veritabanı doldurmak }].

Ayrıca veritabanı göçler ve recently updated göçler otomatik fark için destek içerir ve göç modelleri üretmek.

As per your doctrine complaints, you can run a command ./doctrine generate-models-db veya ./doctrine generate-yaml-db otomatik olarak geçerli veritabanı kurulumu sırasıyla modelleri ve yaml dosyaları oluşturmak için.

Diğer incelikler senin şemada bazı iyi davranışları uygularken hayat çok daha kolay yapar "Behaviors" içerir. Örneğin sizin sınıf dosyasına "Timestampable" davranış ekleyebilirsiniz. Doctine otomatik olarak bir 'created_at' ve 'updated_at' sütun ekler onları doldurur ve her $object->save() otomatik 'updated_at' sütunu güncelleştiren çalıştırın. Daha karmaşık davranışlar (gerçekten sadece NestedSet olsa) i18n, masa sürüm, ve ağaçlar yer alıyor.

Şahsen ben Doktrini ile son derece aşık olmuştur ve bu konuda ben her fırsatta hayran oldum.

Ben kabartmak olmadan, kendi yarattık. (Benim yerinde kaynaklar güncellemeniz gerekir rağmen)

Ben size söz aklında tam puan ile onu yaratan: xml dosyaları hiçbir onlarca, hiçbir büyük çerçeve, mülkiyet mappigns için veritabanı ile sadece basit Kurucular ve bu temel CRUD / malzeme Üyelik / Bul yapar. I do şeyler çoğu için, ben bile özel sorguları yazmak gerekmez.

Ben daha önce my site, aynı zamanda, onun fikrini almak için basic examples check out emin olun tüm bu yazdık.

Ben serbest olacak bir sonraki sürümü tek on-line join (sizin veritabanı üzerinden bir 'yol' yürümek) katılmak üzerine katılmak ini tabanlı veritabanı ayarları, çapraz veritabanı desteği, süper basit bir veritabanı soyutlama ve standart bir logger düştüğü çalışma ile gelir geri SQLite veritabanı aşağı eğer.

Eğer güncellemeleri ilgileniyorsanız, sadece bir not vermek, bu tarihten sonra bir acele koyacağım.

Oh yeah and don't forget, there's also nice visual scaffold generator called Pork.Generator. It tries to analyze your database structure and find 1:1 1:many and many:many relations, and can automatically generate the classes for you :-) relations found in database

Zend_Db_Table ve Zend_Db_Table_Row Senin tarif ettiğin ne de oldukça iyi. Bunu en metadata veritabanından kendisinden "keşfedildi" olduğu, herhangi bir yapılandırma dosyası gerekmez.

Teknik Bu sınıflar ActiveRecord desen uygulamak gerekmez. Bunun yerine, Table Data Gateway uygulanması ve Row Data Gateway desenleri. Birlikte, bu ActiveRecord gibi benzer değer sunan, ve bazı yönlerden ActiveRecord daha esnek.

Ama herhangi bir ORM olduğu gibi, OO arabirimi aracılığıyla yapamaz bazı SQL sorguları ve işlemleri kaçınılmaz vardır. Hiç ORM tek muhatap olarak hizmet verebilir.

Dipnot: Ben özellikle Zend_Db bileşeni üzerinde, bir yıldan biraz için Zend Framework proje üzerinde çalıştı. Ama artık onlar için işe yaramaz.

Bakımı çerçeve edin. Ben ActiveRecord (zamanı yansıma) üzerinden kod üretimi tercih olsa da, ben ORM özellikleri açısından özellikle kullanımı Bakımı çerçeve kolay bulundu.

http://framework.maintainable.com/mvc/3_model.php#c3.7

Eğer kod üretimi dayalı bir çerçeve istiyorsanız, QCodo deneyin. Öğretiler dedi neyse dcousineau, ben Qcodo için söyleyebiliriz. Bu tam teşekküllü çerçeve taklit NET / Delphi sürülen bir olaydır. Ancak sadece kod üretme özelliğini can ve çerçevenin kalanından sınıflandırılır, oluşturulan ayırmak için yollar bulmak. Böylece, embed diğer çerçeveler içinde sınıflandırılmış elde edebilirsiniz.

Ruby DataMapper uygulamasını aşağıdaki başka bir seçenek phpDataMapper. Açıkçası Veri Mapper yerine bir ActiveRecord :) bulunuyor.

Ben Symfony ile Doctrine öneriyoruz. Eğer proje (CRUD, Form çerçeve, Kayıt şablonları, DQL, Plugin desteği, Davranışları) büyür sonra ihtiyacınız olacak özelliklere sahiptir bulacaksınız öğrenmek daha var satışlardaki. Her iki proje de çok etkin bir topluluk var ve soruların çoğu zaten resmi öğreticiler veya bir forumda cevap olmuştur çünkü, bir çıkmaz kendinizi bulmak gerekir.

Eğer YAML veritabanı tanımları beğenmezseniz, her zaman ORM Designer veya MySQL Workbench kullanabilirsiniz.

Sen CoughPHP veya Propel içine bakmak olabilir.

Ben tavsiye QCubed. Bu kod üretimi, UI iskele ve hızlı uygulama geliştirme odaklanan inanılmaz güçlü bir PHP5 sadece ORM çerçevesi bulunuyor. Eğitim videolarına bir göz atın: http://qcu.be/content/video-screencasts

https://github.com/hazardland/db.php

Artıları

  • Üretir / veritabanı / tablo / alan / çeşitli tablo / alan anında niteliklerini değiştirir.
  • Herhangi bir kurulum gerektirmiyor.
  • Hiç yapılandırma vardır.
  • Sadece kütüphane vardır ve işe başlamak için db bağlantı parametrelerini belirtmek gerekiyor.
  • Bu lokalizasyon desteği inşa etti.
  • Çeşitli önbellek seviyesi vardır ve önbellek motoru genişletmek için olanak sağlar.
  • Bu çok çeşitli veritabanı bağlantıları aynı anda çalışır.
  • Bu diğer veritabanı sunucularında bulunan tablolar arasındaki ilişkileri yapabilirsiniz.
  • Bu sınıf ve değişken doc yorumlarınızı kullanarak tablo / alan özelliklerini ayıklar.

Eksileri

  • Bu nesneler ile çalışır. yani tanımlanmış bir sınıf var ve yük veya vb kaydetmek için sınıfın örneğini olmalıdır
  • Hiçbir sitesi var ama örnekler klasörü vardır.