Tablo Seç vs Zend Framework İlişkileri

5 Cevap php

Hey! Ben sadece zend çerçevesinde tabloları birleştirme kullanarak sizin adamlar görüş bilmek istiyorum.

Tabii ki bir referenceMap ve dependentTables ve malzeme tanımlama, veya kullanarak ilişkileri kullanabilirsiniz

setIntegrityCheck(false)

Bir db içinde seçin (). SetIntegrityCheck sürümü bana biraz kirli görünüyor, ancak diğer sürümü büyük querys ve birçok tablo birleştirme için çok uygun değildir ...

Ben 5 yıl şimdi ve Zend Framework için yeni bir PHP geliştiricisi olduğum ve sadece benim ilk proje için bir yön almak istiyorum.

Teşekkürler!

5 Cevap

Ben şahsen yerde hepsini kullanın. Ben genellikle bir referans haritası kurmak yapmak ve sonra bu ilişkiyi çağıran bir GetX ile tanımlanan modeli () olacak neler.

class Model_Content extends Zend_Db_Table_Row_Abstract
{
    public function getComments($showInactive = false)
    {
        $select = $this->_table->select();
        if (!$showInactive) {
            $select->where('comment_active = \'y\'');
        }
        return $this->findDependentRowset('Model_DbTable_Comment', null, $select);
    }
}

Güzel bir yaklaşım ... Bildiğim kadarıyla ben gördüğünüz gibi, ZF sağ, 2 veya daha fazla tablodan veri içeren bir satır kümesi almak için sadece select () bir şey var mı? Örneğin, ben bir kullanıcı olabilir ve bu kullanıcının bir görüntü ve bir hesabı vardır. Her ikisi de ayrı tablolarda bulunmaktadır.

Ben findDependentRowset kullanırken olduğumda, gibi bir sonuç almak için hiçbir yolu yoktur:

username => tom
imagepath => /images/tom.jpg
accounttype => free

bir nesnenin içinde, değil mi? Ya ben bir şey eksik? Yardımlarınız için teşekkürler!

Şahsen ben her yerde (yanlış) setIntegrityCheck kullanın. Evet, bu tür kirli ama o karmaşık gibi sorguları katılmak yazmak için KISS ve çok daha kolay.

Richard öncede söylediğim gibi, bu KISS ve çok büyük sorguları bina için tek seçenek çünkü ben de setIntegrityCheck (false) kullanıyorum. Select () kullanarak güzel bir şey, bunu yankı olmasıdır.

Bu şekilde size referenceMap kullandığınız zaman o kadar kolay değildir işinizi, kontrol edebilirsiniz ...

Eğer sayıda veri çekerek sorguları gerçekleştirirken sürece findDependentRowset / findParentRow yöntemleri tüm adil ve iyi. Daha önce yapılmıştır ve ben web ve veritabanı sunucuları arasında veri trafiğinin bir sürü saat hızına sahip olsa bile geçmiş deneyimlerinden, bu yöntemleri kullanarak başka bir veritabanı sorgu çağırır. Bu özel durumda, uygulama daha sonra birleştirme yöntemi kullanmak dönüştürülmesi gerekiyordu.

Ancak, findDependentRowset ve findParentRow yöntemleri sonra katıldı tablodan yeni Zend_Db_Table_Row nesne üzerinde aynı yöntemleri çağırmak için izin kendi avantajı var.

rtmilker: findDependentRowset böylece durumda Zend_Db_Table_Rows bir dizi döndürmesi gerekir:

foreach($myTableAdapter->findDependentRowset('New_Table_Class', 'rule/[null]', $select) as $dependentRowObject){
    Zend_Debug::dump($dependentRowObject->toArray());
}

FindParentRow yöntemi açıkça foreach ifadesi gerektirmez; fetchRow () / fetchAll () yöntemleri ile şey aynı tür.