Zend Model Çoklu Tablolar Kullanma ve kombine bir sonuç kümesi döndüren

2 Cevap php

Merhaba Bu da bir çok özel veya çok genel quetion - Ben emin değilim, ve ben genellikle Zend framework / oo yeniyim. Bu bir aptal S. ise lütfen sabırlı olun ..

Her neyse, ben böyle bir şey yapar bir model oluşturmak istiyorsanız:

Read all the itmes from a table 'gifts' into a row set

for each row in the table, read from a second table which shows how many have been bought, the append this as another "field" in the returned row

return the row set, with the number bought included.

Basit Zend örneklerin çoğu sadece bir modelde bir tablo kullanmak gibi görünüyor, ama benim okuma ben oldukça denetleyicisi daha, orada işlerin çoğunu yapmak gerektiğini önermek gibi görünüyor. Bu çok genel bir soru ise, 2 tabloları ile çalışır ve bir dizi döndürür bir modelin herhangi bir örnek harika olurdu!

Şimdiden yardımlarınız için teşekkürler!

2 Cevap

Ben "gift_order" falan gibi bir şey olduğunu, ikinci tablo varsayalım.

Bu durumda yabancı tuşları ile "hediye" ve ve "gift_order" beetween tabloları ilişkileri belirlemek ve masa sınıfta bunu açıklamak gerekir.

It will look like this

    class GiftOrder extends Zend_Db_Table_Abstract
    {
    /** Table name */
    protected $_name    = 'gif_order';
    protected $_referenceMap = array(
    "Fileset" =>array(
    	"columns" => array("gifId"),
    	"refTableClass" => "Gift",
    	"refColumns" => array("id")
    ));
      ........................

You need to specify foreigh key constraint while create table with SQL
      ALTER TABLE `gift_order`
  ADD CONSTRAINT `order_to_gift` FOREIGN KEY (`giftId`) REFERENCES `gift` (`id`) ON DELETE CASCADE;

Bu size bu link link http://framework.zend.com/manual/en/zend.db.table.relationships.html adresinde bu konuda daha fazla bulabildiğim arıyorsanız bir şey varsa

Böyle çözümü ile döngü hediyeler mümkün olacak ve herhangi bir karmaşık SQL olmadan, onların emir almak

$ RowSetGifts = $ this-> findGifts ();

while($rowSetGifts->next()){
   $gift = $rowSetGifts->current();
   $orders = $gift->findGiftOrder();//This is magick methods, this is the same $gift->findDependentRowset('GiftOrder');

/ / Şimdi emirleri ile bir şeyler yapabilirim - sayımı ($ siparişleri), döngü onları veya düzenleme

}

Ne istediğinizi döndüren hediyeler modeli sınıfında bir işlev oluştururken öneriyoruz. Muhtemelen gibi görünecektir:

public function getGiftWithAdditionalField($giftId) {
  $select = $this->getAdapter()->select()
    ->from(array('g' => 'gifts'))
    ->joinLeft(array('table2' => 't2'), 'g.gift_id = t2.gift_id', array('field' => 'field'))
    ->where('g.gift_id = ?', $giftId);
  return $this->getAdapter->fetchAll($select);
}

Sen Zend Framework Docs on Joins daha fazla bilgi için bakabilirsiniz.