PHP / Zend Framework: Hangi nesne karmaşık bir tablo katılmak ele alabileceğinizi?

1 Cevap php

Ben Zend Framework anlamak daha zor kavramlardan biri Tablo Veri Ağ Geçidi model çoklu-tablo katıldı işlemek gerekiyordu nasıl olduğunu düşünüyorum. Önerilerden en çok ben sadece bir $ db-> seçeneğini kullanarak katılır () işlemek iddia gördüm ...

Zend DB Select with multiple table joins
Joining Tables With Zend Framework PHP
Joining tables wthin a model in Zend Php
Zend Framework Db Select Join table help
Zend DB Select with multiple table joins

My question is: Which object is best suited to handle this kind of multi-table select statement? I sınıfı ve db tablo arasında 1-1 Tablo Veri Ağ Geçidi desen kıracak modelde koyarak gibi hissediyorum. Neden bir denetleyici bir SQL deyimi ele çünkü henüz denetleyicisi koyarak yanlış görünüyor? ZF olması gerekenden daha zor birden fazla tablodan veri setleri taşıma yapar gibi Neyse, ben hissediyorum. Eğer Herhangi bir yardım sağlamak büyük ...

Teşekkürler!

1 Cevap

definition tarafından, TableData Geçidi yalnızca bir tablo işler.

ZF Zend_Db_Table_Selects bir bütünlük denetimi ile bu tanımı zorlar. Ancak, bütünlük denetimi devre dışı bırakılabilir ve daha sonra katılır yapabilirsiniz. Sadece bu gibi select nesnesi üzerinden katılın yapmak için masa sınıf içinde bir yöntem oluşturun:

public function findByIdAndJoinFoo($id)
{
   $select = $this->select();
   $select->setIntegrityCheck(false) // allows joins
          ->from($this)
          ->join('foo', 'foo.id = bar.foo_id');

   return $this->fetchAll($select);
}

Eğer tanımına sadık istiyorsanız, size some sort of Service Layer kullanabilir veya DataMapper birden fazla tabloları işlemek için nasıl bilir. Bu Db sınıflar ve Kontrolörler arasında oturmak.

Başka bir alternatif Katıldı kullanabilirsiniz ama table relationships ve sonra tembel yük bağımlı satır kümeleri gerektiği gibi değildir. Tabii ki, o zaman Katıldı değil, ancak birden fazla sorgular.

Ve son olarak, hala sadece kullanabilirsiniz Zend_Db_Statement and craft your SQL by hand:

  $stmt = $db->query(
              'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
              array('goofy', 'FIXED'));