2009-08-28 6 views
1

Actuellement, j'utilise un modèle pour saisir une entrée de données (enregistrement). Cela fonctionne très bien pour moi si je n'ai besoin de travailler qu'avec un disque. Cependant, si plus d'un enregistrement est impliqué, cela devient plus compliqué.Données PHP Accès à plusieurs enregistrements

Voici mon modèle de base, en utilisant une table de contacts:

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; 
    } 
} 

Comme vous pouvez le voir, cela fonctionne très bien pour les dossiers simples. Je peux même passer cet objet à Smarty, et utiliser les getMethod() dans un template. Mais ce dont j'ai besoin d'aide pour réfléchir, c'est un bon moyen de prendre ce type de mise en œuvre et de le faire fonctionner pour plusieurs enregistrements, d'une manière propre.

+0

Il pourrait être plus clair si vous avez décrit le comportement souhaité de l'extérieur - que voulez-vous qu'un utilisateur de votre classe soit capable de réaliser? Ensuite, vous pouvez vous soucier de la mise en œuvre ... –

Répondre

1

Vous réinventez la roue. Jetez un oeil à existing ORM (ou au ORM article in the wikipedia) d'abord, avant de décider que vous devez en implémenter un vous-même. Pourquoi ne pas simplement l'utiliser comme une liste d'objets (tableau)?

+0

J'aime vraiment ma roue tho: P – Spot

+0

Ok, vous avez raison. – Spot

0

Vous pouvez donc parcourir le tableau. Chaque noeud de tableau a son propre objet. C'est tout.

Questions connexes