2009-08-03 6 views
1

Je comprends que vous pouvez avoir des utilisateurs de classe étend Zend_Db_Table_Abstract et classe utilisateur étend Zend_Db_Table_Row_Abstract, définissant la propriété $ _rowClass des utilisateurs à l'utilisateur.Comment créer une nouvelle ligne sans la classe de table dans Zend Framework?

Pour créer et enregistrer une nouvelle ligne, je ne sais pas comment effectuer les opérations suivantes:

$users = new Users() 
$user = $users->createRow(); 
$user->name = 'name'; 
$user->save(); 

Pouvez-vous me dire comment je peux faire la follwing à la place?

$user = new User(); 
$user->name = 'name'; 
$user->save(); 

Comme une note de côté, je suis aussi envisager d'essayer d'utiliser la syntaxe suivante pour obtenir une ligne spécifique:

$user = new User($userID); 

Étant donné toutefois que ce ne cherche pas à créer un nouvel utilisateur, mais pour obtenir un utilisateur existant, je pense que la syntaxe suivante peut être plus lisible - que pensez-vous? bien

$users = new Users(); 
$user = $users->fetchRow($userID); 

Répondre

0

, il y a trois options:

  • hack dans les classes de base de zend framework
  • les sous-classe
  • à vos propres baseclasses abstraites pour fournir cette fonction
  • mettre en œuvre cette opération pour chaque classe en soi ...

inutile de dire, la 2ème option est tout à fait le meilleur ... note t chapeau ce n'est pas si cool:

$user = new User($userID); 

vous devrez transmettre le paramètre du constructeur à la classe abstraite super à chaque fois ... cela peut être assez ennuyeux ...

la dernière option, bien sûr , serait d'utiliser quelque chose de différent, qui fonctionne déjà comme vous l'avez décrit, par exemple motion-twins SPOD, que j'aime personnellement beaucoup plus, car il est très léger, petit et simple et s'intègre donc bien avec d'autres cadres, plus c'est mieux conçu et centralisé et le code que vous écrivez avec lui semble plus intuitif ... ou il pourrait vous inspirer, comment patcher le cadre de zend pour travailler pour vous comme vous le souhaitez ...

espoir qui aide ...

greetz

back2dos

0

Comme je ne sais pas comment les classes de table Zend DB et le travail comme, je vous propose une autre option:

Il est lourd et probablement trop de travail à faire pour de nombreuses classes différentes, mais vous pouvez faire quelque chose comme

class User { 
    public function __construct($userID) { 
     //initialize the db 
     $db = Zend_Db::factory(...); 

     $sql = $db->quoteInto("select * from users where user_id = ?", $userID); 

     $userObject = $db->query($sql)->fetchObject(); 

     //now $userObject has all the data of that particular user 
    } 

    public function save() { 
     //first gather this user's data into an array, $userData 
     //put the user id into $user_id 

     $db->update('users', $userData, 'user_id = $user_id); 

    } 
} 

Il est bâclé mais c'est la seule alternative que je peux trouver sur le terrain.

0
class User extends UserModel { 

     function __construct($userid=NULL){ 
      parent::__construct() 

      if($userid!=NULL){ 
       return $this->find($userid); 
      }else{ 
       return $this->createRow(); 
      } 
     } 
    } 

Mais honnêtement, la différence ne vaut pas le coup.

1

Voici comment construire une nouvelle instance de ligne sans objet de la table:

class User extends Zend_Db_Table_Row_Abstract 
{ 
    protected $_tableClass = "Users"; 
} 

$user = new User(); 
$user->name = "name"; 
$user->save(); // performs an INSERT 

Voici comment construire une instance de ligne pour une ligne donnée dans la base de données, sans objet de la table:

class User extends Zend_Db_Table_Row_Abstract 
{ 
    protected $_tableClass = "Users"; 

    public function __construct(array $config = array()) 
    { 
    if (isset($config["key"]) { 
     $table = $this->_getTableFromString($this->_tableClass); 
     $rowset = call_user_func_array(array($table, "find"), (array) $config["key"]); 
     $row = $rowset->current(); 
     if ($row != false) { 
     $config["data"] = $row->toArray(); 
     $config["stored"] = true; 
     } 
    } 
    parent::__construct($config); 
    } 
} 

$user = new User(array("key"=>$userid)); 
$user->name = "name"; 
$user->save(); // performs an UPDATE 

NB: ces exemples de code ne sont pas testés, je vous laisse le soin de le faire.

Questions connexes