Zend Framework: veritabanı ile etkileşim için uygun bir yoldur?

3 Cevap php

Ben Zend Framework ve MVC için oldukça yeni ve ben Zend_Db'nin ve veritabanı ile etkileşim için uygun arada biraz karışık değilim.

Ben PDO MySQL adaptörü kullanıyorum ve soyut sınıfları uzatmak için bazı sınıfları oluşturduk:

class Users extends Zend_Db_Table_Abstract {
    protected $_name = 'users';
    protected $_primary = 'user_id';
    protected $_rowClass = 'User';

    public function getUserbyID($id) { /* code */ }
    // More code here
}
class User extends Zend_Db_Table_Row_Abstract {
    // Code here
}
class Widgets extends Zend_Db_Table_Abstract {
    protected $_name = 'widgets';
    protected $_rowClass = 'Widget';

    public function getWidgetsfromUser($userid) { /* code */ }
    // More code here
}
class User extends Zend_Db_Table_Row_Abstract {
    public function doSomethingWithWidget() { /* code */ }
    // More code here
}

DB erişmek için bir çok yol var gibi görünüyor () (insert, adaptör aracılığıyla fetchAll (), find (), fetchAll (), createRow () ve (), select () nesne kaydetmek) Ben her zaman kendimi geri gidiyor bulmak dokümanlar ben yapıyor olması gerektiğini anlamaya.

SO hazırlanmış deyimleri gitmek için yoludur bana öğretti ve ben (ben olmalıyım?) Rowsets ve satır kullanmaya çalışıyorum, ama ben yine what's the best way to interact with the database? olarak kafam karıştı

(Korkunç açık uçlu soru için özür)

3 Cevap

Muhtemelen hazırlanmış tablolar ve benzeri ayrıntıları girmek istemiyorum Zend_Db kullanma. Sen sadece temel CRUD (Read, Güncelleme Oluştur ve Sil) yapmak için modeli nesneleri kullanmak istiyorum. Ben Programmer's Reference Guide kapsamlı olduğunu biliyorum, ama Zend_Db'nin onun harika bir giriş. Sen Zend_Db_Table belgelerine bir daha yakından bakmak isteyebilirsiniz.

Ama soruya hızlı bir cevap vermek. Bazı varsayılan davranışı geçersiz kılmak için gereken sürece Zend_Db_Table_Row_Abstract uzatmak gerekmez. Ayrıca muhtemelen sadece olması için kullanıcılar sınıfı kolaylaştırabilirsiniz:

class Users extends Zend_Db_Table_Abstract {
  protected $_name = 'users';

  // Code here
}

Sonra aşağıdaki kullanarak söz bazı şeyler yapardı kullanmak için:

//Create a Users Model Object
$usersDb = new Users();

//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name

//Change the first name of this user to Brian    
$row->first_name = 'Brian';
$row->update();

//Insert a user into the database
$data = array(
  'first_name' => 'Gilean',
  'last_name' => 'Smith');
$usersDb->insert($data);

//Retrieve all users with the last name smith and print out their full names
$rows = $usersDb->fetchAll($usersDb->select()->where('last_name = ?', 'smith'));    
foreach ($rows as $row) {
  echo $row->first_name . ' ' . $row->last_name
}

Genel olarak, insanlar nesne yönelimli programlama alışkanlıklarını maç için, Tablo ve Satır nesneler aracılığıyla veritabanına erişmek için tercih.

Dönüştürmek veya sorgu girişlerini veya çıkışlarını doğrulamak için kod yazmak gerekirse OO yaklaşım yararlıdır. Siz de sık sık ihtiyaç duyulan sorguları saklanması için bir tablo veya satır sınıfta özel yöntemleri yazabilirsiniz.

Ama nesne yönelimli arayüzü, yapmanız gerekebilir veritabanı işlemleri her türlü gerçekleştirmek mümkün basitleştirilmiştir. Yani derin defterleri ve size SQL üzerinde daha hassas kontrol gerektiren zaman query() ve fetchAll() gibi Zend_Db_Adapter yöntemlere karşı bir SQL sorgusu çalıştırabilirsiniz.

Bu veritabanlarına nesne yönelimli arabirimler için oldukça yaygındır. every SQL özelliği çoğaltmak olabilecek bir OO tabaka delicesine karmaşık olacaktır. Yani uzlaşma, bir OO tabaka genellikle size gerekli kapakların altında gitmek için yeteneği verirken, en yaygın görevleri yapmak kolay yolları sağlamak için çalışır.

Bu sizin çok genel soruya çok genel bir yanıt.

Ben kaydetme yöntemini kullanmanızı öneririz.

//Create a Users Model Object
$usersDb = new Users();

//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name

//Change the first name of this user to Brian    
$row->first_name = 'Brian';
$row->save();

//Insert a user into the database
$newUser = $usersDb->fetchNew();
$newUser->first_name = 'Gilean';
$newuser->last_name  = 'Smith';
$newUser->save();

// OR if you get your data from post or any array
$newUser = $usersDb->fetchNew();
$newUser->setFromArray($data_from_post);
$newUser->save();

Eğer userRow üzerinde tasarruf / ekleme / güncelleme fonksiyonunu ovewrite isteyebilirsiniz çünkü bu her zaman kullanıcı modelinin bir örneği neden ve bunları da özel yöntemler var (ex IsAdmin) ve çünkü ben daha fazla bu yaklaşım gibi nedenidir onlar güncellenir / sokulur önce bir şey yapmak.