Zend Veritabanı Adaptörü - Karmaşık MySQL Query

1 Cevap php

Ben bir sorgu yürütür benim Navigasyon modelinde bir işlevi tanımlanmış olması ve sorgu yürütme / üreten bir daha "Zendy" yolu olup olmadığını merak ediyordum. I istimal sorgu keyfi kayıt sırasını ayarlamak için Bill Karwin another thread here on tarafından önerilmişti. Ben hazırlanmış bir deyimi kullanarak çalıştı, ancak SIGN () fonksiyonu değerleri alıntı var.

MySQL için PDO adaptörü kullanıyorum.

/**
 *
 */
public function setPosition($parentId, $oldPosition, $newPosition)
{
    $parentId = intval($parentId);
    $oldPosition = intval($oldPosition);
    $newPosition = intval($newPosition);
    $this->getAdapter()->query("
        UPDATE `navigation`
        SET `position` = CASE `position`
            WHEN $oldPosition THEN $newPosition
            ELSE `position` + SIGN($oldPosition - $newPosition)
            END
        WHERE `parent_id` = $parentId
        AND `position` BETWEEN LEAST($oldPosition, $newPosition)
            AND GREATEST($oldPosition, $newPosition)
    ");
    return $this;
}

1 Cevap

Sen kullanabilirsiniz Zend_Db_Select ve / veya öyle gibi eğer çalışırsa Zend_Db_Expr, but, bunu değiştirmeyin. Onlar var ya kodunuzu daha Zendy yapmak için sırf ZF bileşenlerinden herhangi birini kullanmak gerçekten gerek yoktur. Belirli bir sorunu çözmek için bunları kullanın.

Her soyutlama bazı derece yavaş kodunuzu yapacak unutmayın. Çok olmayabilir, ama aynı zamanda gerekli olmayabilir. Sanırım biz olmadan ve basit yapmış olabilir olsa bile, mümkün olduğunca çok sayıda ZF bileşenleri kullanmak yenik bir proje benim kendi deneyimlerinden konuşabilir. Ödemek ve biz kendimizi daha sonra onlardan bir sürü üstlenmeden bulundu vermedi.