2010-05-06 4 views
0

J'ajoute quelques modèles à un projet, et je me demandais s'il y a une « meilleure pratique » type d'approche aux modèles créant:arguments et conditions passage au modèle dans CodeIgniter

Est-il judicieux de créer un fonction pour chaque requête spécifique? Je commençais à le faire, puis j'ai eu l'idée de créer une fonction générique à laquelle je pourrais transmettre des paramètres. par exemple:

Au lieu de

function getClients(){ 
    return $this->db->query('SELECT client_id,last FROM Names ORDER BY id DESC'); 
    } 
    function getClientNames($clid){ 
     return $this->db->query('SELECT * FROM Names WHERE client_id = '.$clid); 
    } 
    function getClientName($nameID){ 
     return $this->db->query('SELECT * FROM Names WHERE id ='.$nameID); 
    } 
} 

Quelque chose comme

function getNameData($args,$cond){ 
    if($cond==''){ 
     $q=$this->db->query('SELECT '.$args.' FROM Names'); 
     return $q; 
    }else{ 
     $q=$this->db->query('SELECT '.$args.' FROM Names WHERE '.$cond); 
     return $q; 
    } 
} 

où je peux transmettre les champs et les conditions (le cas échéant) au modèle. Y a-t-il une raison pour que ce dernier exemple soit une mauvaise idée?

Merci!

Répondre

0

Je pense que ce serait une meilleure idée d'utiliser l'enregistrement actif de CI pour compiler les requêtes.

Un exemple:

function all_clients($select) 
{ 
    $this->db->select($select); 

    return $this->_get_client_data(); 
} 

function single_client($select, $id = "") 
{ 
    // validate $id 

    $this->db->select($select); 
    $this->db->where("id", $id); 
    $this->db->limit(1); 

    return $this->_get_client_data(); 
} 

// Only called by a method above once the query parameters have been set. 

private function _get_client_data() 
{ 
    $q = $this->db->get("clients"); 

    if($q->num_rows() > 0) 
    { 
     return $q->result_array(); 
    } 

    return FALSE; 
} 

Active Record de CI fait tous les trucs que vous désireux de beaucoup plus facile. Vous pouvez imaginer configurer vos fonctions publiques pour définir conditionnellement un certain nombre d'options avant d'appeler le $this->db->get(). Je suppose que vous appelez _get_client_data un attrape-tout (?) Et l'exécution de toutes vos données de récupération par une seule méthode rend les choses comme la gestion des erreurs beaucoup plus facile à maintenir.

REMARQUE: N'oubliez pas de toujours valider les données de ce type. Je sais que vous le faites, mais je ne fais que le répéter.

Questions connexes