Zend Framework ile MVC veri tasarım sorunu

1 Cevap php

Ben bir sınıf benim veritabanındaki bir tabloya erişim temsil eden bir sınıf varsa: tablo ilişkisi, bu yüzden bir sınıf tablo ayrıntıları gizleyebilirsiniz. Ama herhangi bir yararlı bir uygulama olarak birkaç tablo sorgulamak zorunda. Nasıl sınıfını kullanarak bu uyum: tablo tasarımı?

1 Cevap

Eğer birini seçin gerçekten koşullara bağlıdır, ancak bunu başarmak için farklı şekillerde bir çift, var.

1) nesneler ve veritabanı arasındaki bağlantıyı kırmak

Veritabanı tabloları ile hiçbir bağlantısı var senin nesneleri yazın. Öncelikle veritabanı tabloları normalleştirmek, sonra, uygulamanın kullanıcı veri ile etkileşim nasıl bakmak. Nesnelere veri modeli, ancak (yani Zend_DB_Table_Abstract sınıf) masaya her nesneyi kravat yok

Size nesneleri kurduk, sonra geri veritabanındaki ilgili tablolar için nesneleri harita mapper sınıflar yazmak. Bunlar (uygunsa) Zend_Db_Table uzatmak sınıflardır.

Bunu iki şekilde katılır işlemek, ya sadece sizin mapper sınıfı içinde ilgili yöntemleri yapmak Zend_Db_Select kullanın (IMHO daha iyi bir seçimdir), Zend_Db_Table ilişki işlevsellik yoluyla katılır, ya da harita olabilir.

Yani o zaman (her zaman muhtemelen masa başı değil) iki sınıfları var

Person PersonMapper

Kodunuzda, bazı nesneler ile çalışmak, ya da yeni bir nesne oluşturmak istediğinizde

$person = new Person();
$person->setName('andrew taylor');

Sonra kaydetmek için eşleştiricisine onu geçmek yazmak:

$personMapper = new PersonMapper();
$pesonnMapper->save($person);

Ya da, o başka bir yol yapmak:

$personMapper = new PersonMapper();
$person = personMapper->load(29);

$person->setName('joe bloggs');
$personMapper->save($person);

Burada itibaren sonraki adım dayalı bir koleksiyon sınıf olmak SPL olacaktır:

$personList = $personMapper->loadAllMen();

foreach($personList AS $person) {

 echo $person->getName();
}

: $ PersonMapper-> loadAllMen () yöntemi gibi olduğu

$select = $this->select();
$select=>where('gender = "Male"');
$zendDbRows = this->fetchAll($select);

return new PersonList($zendDbRows);

2) MySQL İzlenme

Orada katılmak başına bir satır, bu nedenle, size emir tabloda bir kimliği dayalı müşteri bilgilerini katılmadan konum ve salt okunur yapıyoruz katıldı tabloları bir sürü varsa (yani istemiyorum Eğer, o zaman, üstünde tek bir görünüm sizin normalize tabloları oluşturmak) Zend_Db_Table adaptör aracılığıyla herhangi bir bilgi güncelleyin. Görünümü tek bir tabloya bağlanma gibi hissediyor Zend aracılığıyla bunu perde arkasında katıldı işler.

Bu bazı uyarılar vardır, MySQL Gösterim onlar kesinlikle sadece okunduğu, bazı performans sorunları (o FK birleştirmeler tek bir satırda en iyi neden olan) var ve yok.