2012-08-27 1 views
1

i avoir deux tables users et userslog où i ai users contient id, username, email, gender et userslog contient id, firstname, lastname, designation et u_id qui est foreign key of users table.comment insérer des valeurs de formulaire zend dans deux tables dans zend?

mon contrôleur de registre

class RegisterController extends Zend_Controller_Action 
{ 

public function init() 
{ 
    /* Initialize action controller here */ 
} 

public function indexAction() 
{ 

    $form = new Application_Form_register(); 
    $this->view->form = $form; 

    if($this->getRequest()->isPost()) 
    { 
     $data = $this->getRequest()->getPost(); 
    } 


} 


} 

mon modèle de registre est

class Application_Model_DBtable_register extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
// i have to define two tables here!! how? 
} 

ma forme zend registre

class Application_Form_register extends Zend_Form 
{ 
public function init() 
{ 
    $this->setName('register'); 
    $this->setMethod('post'); 

    $firstname = $this->createElement('text', 'firstname'); 
    $firstname->setLabel('FirstName: ') 
       ->setRequired(true) 
       ->setFilters(array(
         'stringTrim','StringToLower')); 

    $lastname = $this->createElement('text', 'lastname'); 
    $lastname->setLabel('LastName: ') 
      ->setRequired(true) 
      ->setFilters(array(
        'stringTrim','StringToLower')); 

    $email = $this->createElement('text', 'email'); 
    $email->setLabel('Email: ') 
      ->setRequired(true); 

    $username = $this->createElement('text', 'username'); 
    $username->setLabel('UserName: ') 
      ->setRequired(true) 
      ->setFilters(array(
        'stringTrim','StringToLower')); 

    $password = $this->createElement('password', 'password'); 
    $password->setLabel('Password: ') 
      ->setRequired(true); 

    $password2 = $this->createElement('password', 'password2'); 
    $password2->setLabel('Confirm Password: ') 
      ->setRequired(true); 

    $submit = $this->createElement('submit', 'register'); 
    $submit->setLabel('Register') 
      ->setIgnore(true); 

    $this->addElements(array(
      $firstname, 
      $lastname, 
      $email, 
      $username, 
      $password, 
      $password2, 
      $submit)); 
} 

}

Comment puis-je faire? pouvons-nous utiliser Zend_Auth pour l'authentification? si oui alors comment.please me donner un exemple. J'ai vu $_dependantTable et $_referenceMaps mais je ne peux pas le démonter. Je suis confus comment le faire parce que je ne peux pas définir le nom de table plus d'une fois dans une classe. Je dois insérer les valeurs en même temps dans deux tables différentes.

+0

En fait, j'ai plan pour ajouter '' userlog_id' dans user' et quand quelqu'un peut mettre à jour certaines données dans 'userslog' alors une nouvelle ligne est insérée au lieu de mise à jour la même colonne. L'identifiant principal de 'userslog' sera inséré dans le fichier' userslod_id' dans la table 'users'. –

Répondre

1

ok ceci est incorrect :

class Application_Model_DBtable_register extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
// i have to define two tables here!! how? 
} 

L'intention des classes qui ont DbTable dans leurs noms est qu'ils sont l'adaptateur/passerelle à une seule table de base de données.

Donc, votre question serait en rupture d'au moins 2 classes/fichiers:

class Application_Model_DBtable_Users extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
} 

class Application_Model_DBtable_Userslog extends Zend_Db_Table 
{ 
protected $_name = 'userslog'; 
} 

je à ce niveau mis une méthode dans les deux classes qui effectue les actions nécessaires pour enregistrer un utilisateur. Plus tard, vous pouvez décider d'utiliser des mappeurs et des objets de domaine. Ceci devrait fournir un exemple de base pour démontrer les étapes que vous pourriez prendre pour implémenter votre conception. Le point derrière les modèles DbTable est de résumer la connexion à une table donnée, chaque table a son propre modèle DbTable. Le modèle DbTable fournit un adaptateur à chaque table et un accès à l'API fourni par Zend_Db_Table_Abstract.

Les étapes montrées ci-dessus pourraient tout aussi bien être prises dans un troisième modèle ou dans le contrôleur lui-même.

Note: Il peut être loin de le faire avec une instruction SQL, mais je ne suis pas la personne qui sait cette réponse.

+0

thnx. . mais s'il y a un autre moyen de ne pas créer des classes différentes pour différentes tables. alors aidez-moi s'il vous plaît! –

+0

Il existe plusieurs façons de le faire sans créer de classe pour chaque table. Mais pourquoi s'embêter, c'est une classe simple qui est utile pour tant de choses. Si vous avez l'obligation de ne pas utiliser ces cours, veuillez préciser ce que vous devez accomplir. – RockyFord

2

Afin d'insérer des valeurs dans les utilisateurs et les tables userslog, vous pouvez essayer:

Dans votre RegisterController:

$db = new Application_Model_DBtable_register(); 

$db->instertValuesInUsers(array('column_name' => $data['value'], 'column_name' => $data['value'], ...........)); 

$db->insertValuesInUserslog(array('column_name' => $data['value'], 'column_name' => $data['value'], ...........)); 

En vous Application_Model_DBtable_register:

public function instertValuesInUsers(array $data) { 
    $this->insert($data); 
} 

public function insertValuesInUserslog(array $data) { 
    $db = new Zend_Db_Table(array('name' => 'userslog')); 

    $db->insert($data); 
} 
0

Vous pouvez essayer comme ceci:

public function insertNew($tb, $data) { 
    $db = new Zend_Db_Table(array('name' => $tb)); 
    $q = $db->insert($data); 
    if($q) 
     return true; 
    else 
     return false; 
} 
+0

Certaines explications seraient bonnes. – Nilambar

Questions connexes