2010-09-01 21 views
3

Est-il possible dans ORM de Kohana 3 d'exécuter une partie de code dans un modèle, mais seulement après que ce modèle a été chargé à partir de la base de données? Un exemple simple est une relation has_one requise.Kohana 3 ORM: constructeur "après chargement"

ORM::factory('user')->where('name', '=', 'Bob')->find(); 

Maintenant, si tous les utilisateurs doivent avoir une autre propriété, donc si Bob n'existe pas, il devra être créé? À l'heure actuelle, à l'endroit où cette ligne est en cours d'exécution, je vérifie la clé primaire nulle et demande au modèle d'ajouter cette relation si c'est le cas. Mais y a-t-il un moyen de le faire par le modèle? Le problème avec le constructeur est que les modèles peuvent être construits vides juste avant d'être peuplés de la base de données, comme cela est visible dans cet exemple, donc je ne le veux pas.

Répondre

3

il suffit de créer méthode de modèle avec toute logique requise:

public function get_user($username) 
{ 
    $this->where('name', '=', $username)->find(); 
    if (! $this->_loaded) 
    { 
     // user not found 
    } 
    else 
    { 
     // user exists, do something else 
    } 
    // make it chainable to use something like this: 
    // echo ORM::factory('user')->get_user('Bob')->username; 
    return $this; 
} 
+0

extension trouver fonctionnerait aussi bien, mais cette façon laisserait trouver seul pour les autres choses aussi bien et gardez-le un peu plus à jour si les params changent sur la méthode find. – joelpittet

3

Essayez de surcharger la méthode find() dans votre modèle:

class Model_User extends ORM { 

    public function find($id = NULL) { 
     $result = parent::find($id); 
     if (!$result->loaded()) { 
      // not found so do something 
     } 
     return $result; 
    } 

}