Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
[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
Hello,
tu dois simplement ajouté ça :
$select->setIntegrityCheck(false);
courage !
Hors ligne
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:
[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
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
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
bonjour,
[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
J'aurais plutôt proposé de mettre un trigger AFTER INSERT sur la table pour écrire la ligne dans l'autre table...
Hors ligne
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
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
J'ai trouve la solution, merci a tout le monde
Hors ligne
Pages: 1