Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-08-2012 16:59:53

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

ajouter un id d'un champ dans une autre table

bonjour a tous voila j'ai un problème et je ne sais pas comment le résoudre , je suis entrain de créer un système inmail et le problème c'est je voudrais quand un champ id s'ajoute dans une table directement il se s'ajoute dans une autre , mais le seul truc c que cette Id est auto incrémente et du coup je voudrais savoir comment faire pour que des que se champ est créer je récupère son id et je l'ajoute dans une autre table , quelqu'un aurait une idée , j'ai pensé faire un select sur la bd avec max(id) mais le seul problème c'est que si deux utilisateur envois un message au même moment sa peux causer des problèmes

merci de votre aide

Hors ligne

 

#2 11-08-2012 04:02:43

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: ajouter un id d'un champ dans une autre table

Si tu utilise Zend_Db, la fonction insert() retourne l'id inséré. Après je suis pas sur d'avoir bien saisie la quesiton smile

Hors ligne

 

#3 13-08-2012 12:20:48

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

merci pour ta réponse mais moi je cherche a insérer un id qui est auto incrémente dans deux tables en même temps et j'ai pas d'idée comment faire

Hors ligne

 

#4 13-08-2012 13:15:31

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: ajouter un id d'un champ dans une autre table

nathalie90 a écrit:

merci pour ta réponse mais moi je cherche a insérer un id qui est auto incrémente dans deux tables en même temps et j'ai pas d'idée comment faire

Bonjour,
Que ta clé primaire soit auto-incrémentée ou non la méthode insert() de Zend_DB retourne toujours le dernier id qui est inséré.

Hors ligne

 

#5 13-08-2012 14:16:01

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

mais le problème avec sa c'est que si deux lignes sont insérer en même temps par deux utilisateurs , il peut y avoir un conflit quand je récupère la dernière ligne , pour etre precis je cherche a faire un système "In Mails" comme celui de facebook mais je sais pas comment procéder

Dernière modification par nathalie90 (13-08-2012 14:17:13)

Hors ligne

 

#6 13-08-2012 14:53:40

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: ajouter un id d'un champ dans une autre table

Non c'est le principe de l'auto incremente, Zend_DB doit récupérer le dernier ID dans la même transaction donc tu auras toujours le dernier id que tu as inséré.

Hors ligne

 

#7 13-08-2012 15:29:05

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

merci c 'est ce que j'ai fais mais j'avais des doutes , merci pour votre réponse , le seul probléme que j'ai avec sa c'est que sa me déclenche l'erreur SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails , je ne sais d'ou peut venir cette erreur
mon code est comme suit:

Code:

[lang=php]

$id = $this->_getParam('memberId');
                $user = $userConnecte->id;
                $subject = $form->getValue('subject');
                $body = $form->getValue('body');
                $inmail = new Inmail();
                $inmail->insertInmail($subject, $body, $user);
                $idMail = $form->getValue('idMail');
              
                $select = $inmail->select()->setIntegrityCheck(false)
                        ->from('in_mail', 'max(in_mail_id)');
                $idRecuperer = $inmail->fetchAll($select);
                $idMail = $idRecuperer['max(in_mail_id)'];
               
                $inmailRecipient = new InMailRecipient();

            
                $inmailRecipient->insertInmailRecipient($idMail, $id);

Dernière modification par nathalie90 (13-08-2012 15:38:37)

Hors ligne

 

#8 13-08-2012 16:24:33

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: ajouter un id d'un champ dans une autre table

si j'ai bien saisi votre problème vous n'avez nullement besoin d'effectué une requête pour récupérer l'id inséré. Et le pire vous tentez d’insérer une clé étrangère qui n'existe pas.

Hors ligne

 

#9 13-08-2012 16:29:37

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

je me suis dis quand j’insère l'id dans la ligne

Code:

[lang=php]$inmail->insertInmail($subject, $body, $user);

, je récupère après cette id et ensuite je l'ajoute dans la ligne

Code:

[lang=php] $inmailRecipient->insertInmailRecipient($idMail, $id);

Hors ligne

 

#10 13-08-2012 16:41:46

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: ajouter un id d'un champ dans une autre table

Pour faire simple, vous auriez dû procéder comme ça:

Code:

[lang=php]
$id = $this->_getParam('memberId'); //???pensez au transtypage car on attend un Int
                $user = $userConnecte->id;
                $subject = $form->getValue('subject');
                $body = $form->getValue('body');
                $inmail = new Inmail();
           //j'assigne la dernière valeur qui vient d'être ajoutée à la variable $idInsere 
               $idInsere= $inmail->insertInmail($subject, $body, $user);
                $idMail = $form->getValue('idMail');
               
                
                
                $inmailRecipient = new InMailRecipient();
           
            //l'id retourné !=0 alors la 1ère insertion s'est bien deroulée
             if($idInsere!=0)
                $inmailRecipient->insertInmailRecipient($idInsere, $id);

La méthode insertInmail() de Inmail doit retourner insert() de Zend_Db.En voici une illustration

Code:

[lang=php]
//dans la class Inmail
public function insertInmail($subject, $body, $user) {
$data=array(.......);
 try{
           return $this->insert($data); 
        }  catch (Zend_Db_Exception $e){
            return 0;
            
        }
}

Dernière modification par amiss (13-08-2012 16:43:49)

Hors ligne

 

#11 13-08-2012 17:18:34

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

merci pour votre aide sa marche parfaitement , je vous en suis reconnaissante smile

Hors ligne

 

#12 13-08-2012 17:57:58

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: ajouter un id d'un champ dans une autre table

de rien.bon courage

Hors ligne

 

#13 15-08-2012 15:26:32

nathalie90
Membre
Date d'inscription: 29-05-2012
Messages: 25

Re: ajouter un id d'un champ dans une autre table

une question si vous le permettez , je voudrais savoir comment faire la différence entre deux champs qui ont le meme nom lors d'un appel dans mon fichier phtml , j'ai la table member avec time_create et une table event avec time_create aussi , et je voudrais appeler le time_create de la table event , dans mon phtml je fais echo $this->event[time_create] ,comment pourrai-je différencier les deux sans changer le champ d'une table

Hors ligne

 

#14 15-08-2012 18:15:03

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: ajouter un id d'un champ dans une autre table

au moment de faire votre requête vous devez spécifiez un alias sur chacun des champs sélectionnés.

Code:

[lang=php]

$select = $db->select()
             ->from(array('m' => 'membres'),array('time1'=>'time_create'))...//time1 est un alias de time_create
                    //même chose dans join lors de la jointure

Hors ligne

 

#15 22-11-2012 11:06:21

thomadson
Membre
Date d'inscription: 16-11-2012
Messages: 12

Re: ajouter un id d'un champ dans une autre table

Bonjour Amiss, j'ai suivi ton explication et jarrive a recuperer la cle primaire auto incremente une fois l'ajout effectuer. Mais le problem est que lorsque je veux l'enregistrer dans une autre table bein la j'ai une erreur. Voici les codes

<?php
class ApplicationController extends Zend_Controller_Action
{
   public function ajouterapplicationAction()   
  {       
     $form = new Application_Form_Applicationform();   
     $form->envoyer->setLabel('Enregistrer');
     $this->view->form = $form;   
     if ($this->getRequest()->isPost())       
     {           
        $formData = $this->getRequest()->getPost();           
        if ($form->isValid($formData))           
        {           
           $NomApplication = $form->getValue('NomApplication');               
           $Description = $form->getValue('Description');               
           $NumCategorie = $form->getValue('NumCategorie');               
           $application = new Application_Model_DbTable_Application();               
           $NumApplication = $application -> ajouterApplication($NomApplication, $Description);       
                   
           $appartenir = new Application_Model_DbTable_Appartenir();    
           $appartenir ->ajouterAppartenir($NumApplication,$NumCategorie);    
                               
           $this->_helper->redirector('ajouterapplication','application');           
         }           
         else            
         {               
            $form->populate($formData);           
          }       
       } 
    }
}



<?php
class Application_Model_DbTable_Appartenir extends Zend_Db_Table_Abstract
{   
  protected $_name = 'appartenir';
  protected $_primary = array('NumApplication','NumCategorie');;
  protected $_referenceMap = array('Application' => array('columns'=>'NumApplication',        
                                  'refTableClass' => 'Application_Model_DbTable_Application',
                                  'refColumns' => 'NumApplication'),                            'Categorie' => array('columns'=>'NumCategorie',        
                    'refTableClass'=> 'Application_Model_DbTable_Categorie',                    'refColumns' => 'NumCategorie'));

  public function ajouterAppartenir($NumApplication, $NumCategorie)
  {
      $data = array('NumApplication' => $NumApplication,'NumCategorie' => $NumCategorie,);
      $this->insert($data);
   }   
}


J'arrive tres bien a recuperer les NumApplication et NumCategorie, mais je ne sais pas pourquoi l'ajout dans Appartenir ne marche pas. Svp aidez-moi, merci d'avance

Hors ligne

 

#16 22-11-2012 12:44:38

thomadson
Membre
Date d'inscription: 16-11-2012
Messages: 12

Re: ajouter un id d'un champ dans une autre table

J'ai trouve la solution, merci a tout le monde cool

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages