Birden Records PHP Veri Erişim

2 Cevap php

Bu yüzden şu anda bir veri girişi (kayıt) kapmak için bir model kullanıyorum. Ben sadece tek bir kayıt ile çalışmak gerekiyorsa bu benim için harika çalışıyor. Birden fazla kayıt yer almaktadır Ancak eğer daha karmaşık alır.

İşte benim baz model bir rehber tablo kullanarak, geçerli:

class Contacts_Entry {

    private $_entry = Array('contact_id' => false,
                            'name'       => false,
                            'email'      => false,
                            'phone'      => false,
                            'type'       => false );

    private $_entryKey = Array('contact_id' => 'i',
                               'name'       => 's',
                               'email'      => 's',
                               'phone'      => 's',
                               'type'       => 'i' );


    public function __call($_method, $_arguments)
    {
        /* API: Get */
        if (substr($_method, 0, 3) == 'get') {
            return $this->_getElement(camelCaseToUnderscore(substr($_method, 3)));
        }
        /* API: Set */
        if (substr($_method, 0, 3) == 'set' && count($_arguments) == 1) {
            return $this->_setElement(camelCaseToUnderscore(substr($_method, 3)), $_arguments[0]);
        }
        unset($_method,$_arguments);
        return false;
    }

    private function _getElement($_element)
    {
        if (!array_key_exists($_element, $this->_entry)) { return false; }

        if ($this->_entryKey[$_element] == 's') {
            if (!strlen($this->_entry[$_element])) { return false; }
        } elseif ($this->_entryKey[$_element] == 'i') {
            if (!strlen($this->_entry[$_element]) || !is_numeric($this->_entry[$_element])) { return false; }
        } elseif ($this->_entryKey[$_element] == 'a') {
            if (!count($this->_entry[$_element])) { return false; }
        } else {
            return false;
        }

        return $this->_entry[$_element];
    }

    private function _setElement($_element, $_data)
    {
        if (!array_key_exists($_element, $this->_entry)) { return false; }

        if ($this->_entryKey[$_element] == 's') {
            if (!strlen($_data)) { return false; }
        } elseif ($this->_entryKey[$_element] == 'i') {
            if (!strlen($_data) || !is_numeric($_data)) { return false; }
        } elseif ($this->_entryKey[$_element] == 'a') {
            if (!count($_data)) { return false; }
        } else {
            return false;
        }

        if ($this->_entry[$_element] = $_data) { return true; }
        return false;
    }

    public function load($_entryId)
    {
        // Code to load an entry into $this->_entry;
    }

    public function save()
    {
        // Code to save an entry from $this->_entry;
    }
}

Gördüğünüz gibi, bu tek kayıtlar için çok iyi çalışıyor. Ben bile Smarty bu nesneyi geçmek ve bir şablon içinde GetMethod () s kullanabilirsiniz.

Ama ben düşünmeye yardımcı gerekenler, uygulama bu tür almak ve temiz bir şekilde, birden fazla kayıt için çalışmasını sağlamak için iyi bir yoldur.

2 Cevap

Sen Tekerleği yeniden icat ediyoruz. Eğer kendiniz bir uygulamak gerekir karar vermeden önce, existing ORM 's (veya ORM article in the wikipedia at) ilk başta bir göz atın.

Neden sadece nesneleri (dizi) bir liste olarak kullanmayın. Yani dizi yineleme yapabilirsiniz. Her dizi düğüm kendi nesnesi vardır. Hepsi bu.