Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-06-2012 15:10:17

Neka
Membre
Date d'inscription: 19-06-2012
Messages: 13

[1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

Bonjour,

à partir d'un formulaire j'ajoute pour une personne précise la plage horaire et la zone où celle ci sera.

J'ajoute donc la plage horaire grace à un insert, je fais un max() pour récupérer l'id_plage que je viens d'ajouter à ma base de donnée.

et j'ajoute l'id_plage dans la table SE_SITUER mais la erreur

Message: Select query cannot join with another table

Je ne sais pas d'où peut venir l'erreur, je suis débutante.

Code :
Sélectionner tout - Visualiser dans une fenêtre à part

Code:

 
[lang=php]
$presence = new Application_Model_DbTable_TSeSituer();
$select = $presence->select(max(array('id_plage')))->from('Plage') 
->where("id_personne='$id_p'");
$id_plage=$presence->fetchRow($select); 
$presence->ajouterSeSituer($id_p, $id_plage, $id_z);

Dernière modification par Neka (25-06-2012 15:10:36)

Hors ligne

 

#2 19-09-2012 09:42:46

eabdel
Nouveau membre
Date d'inscription: 19-09-2012
Messages: 1

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

Hello,

tu dois simplement ajouté ça :

$select->setIntegrityCheck(false);

courage !

Hors ligne

 

#3 19-09-2012 12:32:18

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

bonjour,
ya certainement un problème au niveau de ta requête précisément sur la méthode select() . C'est quelque chose de ce genre que tu dois faire:

Code:

[lang=php]

$presence = new Application_Model_DbTable_TSeSituer();
$select = $presence->select()->from('Plage', 'max(array(id_plage))') 
->where("id_personne=?",(int)$id_p);
$id_plage=$presence->fetchRow($select); 
//echo $select->__toString()  //affiche la requête sql generée
$presence->ajouterSeSituer($id_p, $id_plage, $id_z);

Autre chose l'approche consistant à récupérer le dernier id inséré en faisant max(id_plage) est la mauvaise façon de faire car tu peux récupérer le max(id_plage) d'un autre utilisateur ayant récemment inséré son id.Il serait mieux d'utiliser la méthode insert() de Zend_Db_Table qui retourne le dernier id qui vient d'être inséré.

Hors ligne

 

#4 06-10-2012 00:55:54

dalel
Nouveau membre
Date d'inscription: 22-09-2012
Messages: 2

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

bonjour
si le deux objets (id_personne et id_plage) sont appartient à deux tables differentes donc il faut faire la jointure entre les deux table dans la condition "where".

Hors ligne

 

#5 20-11-2012 09:55:31

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

Bonjour, j'aimerais egalement recuperer une cle primaire auto incremente et l'inserer dansune autre table (association porteuse de donnees).Seulement j'y arrive pas.Stp Amiss peux-tu me montrer comment proceder avec la methode insert() dont tu parles? merci

Hors ligne

 

#6 20-11-2012 12:27:15

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

bonjour,

Code:

[lang=php] 
//dans la classe modèle qui hérite de Zend_Db_Table

//insertion table1
public function add1($id, $name){

$data=array( 'id' => $id,
                    'name' => $name
                );
return $this->insert($data); // retourne la clé primaire de l'enregistrement récemment inseré

}

//insertion table2
public function add2($id_table1 ,$name){
$data=array( 'id' => $id_table1,
                    'name' => $name
                );
 $this->insert($data); 

}

//dans le controlleur
//appel des méthodes du modèle
$table1=add1('5','toto'); //insertion dans la table1 puis on récupère la dernière clé primaire insérée

//on s'assure que $table1 est bien sûr un int
if(is_int($table1){
$table1=add2($table1,'toto'); //insertion dans la table2
}

Dernière modification par amiss (20-11-2012 12:29:53)

Hors ligne

 

#7 20-11-2012 12:31:19

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

J'aurais plutôt proposé de mettre un trigger AFTER INSERT sur la table pour écrire la ligne dans l'autre table...

Hors ligne

 

#8 20-11-2012 20:29:44

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

Théocrite a écrit:

J'aurais plutôt proposé de mettre un trigger AFTER INSERT sur la table pour écrire la ligne dans l'autre table...

Bien sûr qu'un trigger aurait été plus adapté.

Hors ligne

 

#9 22-11-2012 11:12:19

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

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

 

#10 22-11-2012 12:41:16

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

Re: [1.11.11] Ajouter clé primaire qui est un clé étrangère et max ()

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