IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

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


Sujet :

Zend_Db PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Points : 32
    Points
    32
    Par défaut 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
    1
    2
    3
    4
    5
    6
     
                           $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);

  2. #2
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Bonsoir,
    Tu as une instance de Application_Model_DbTable_TSeSituer et tu cherche à faire un from, ce qui n'ets pas possible de cette façon.

    Tu peux utiliser les jointure avec cette instance ou encore utiliser seulement une instance de ta bdd sans préciser de table en particulier.

    Je t'invite à regarder un peu plus la doc qui est très claire à ce niveau.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    Merci de t'intéresser à mon problème.

    Je sais que j'ai fais une longue réponse à lire mais j'ai vraiment besoin d'aide pour avancer sur mon projet je suis maintenant au point mort.

    Donc quand je fais ca dans mon phpmyadmin ca fonctionne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `SE_SITUER` SELECT `id_personne`, max(`id_plage`), `id_zone` FROM Plage, Personne, Zone  where id_personne=1;

    j'ai essayer de modifier le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$select = $bd->select();
                            $select->from (max('id_plage'),'Plage');
                            $select->from(array('Plage','Personne','Zone'));
                            $select->where("id_personne='$id_p'");
                            $presence = new Application_Model_DbTable_TSeSituer();
    			$presence->ajouterSeSituer($select);
    Pour passer par un instance de ma bdd ce que je n'avais jamais fait. Mais du coup il me mets que Undefined variable: bd .

    Pourtant j'ai suivi le faq qui dit que :

    Depuis la version 1.8 et Zend_application, vous pouvez construire un objet $db de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    resources.db.adapter = PDO_MYSQL
    resources.db.params.host = localhost
    resources.db.params.username = "login"
    resources.db.params.password = "mdp"
    resources.db.params.dbname = test
    resources.db.isDefaultTableAdapter=true
    mais j'ai du oublier quelquechose qui lui dit que c'est dans $bd.

    ma connexion à ma BD marche ailleur puisque j'utilise pas $bd mais mes objets des models extends de Zend_Db_Table_Abstract.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = Zend_Db_Table::getDefaultAdapter();
    Pour conserver architecture MVC tous vos requête doivent être dans le model, pas de requête dans le controller.

    si l'insertion Plage et dans la même page que l'autre insertion, l'id et retourner par la fonction insert de Zend_Db

    Model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function ajouterPlage($data);
    {
         return $this->insert($data);
    }
    A la recherche d'un film : http://chercher-un-film.com

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par neka11 Voir le message
    Donc quand je fais ca dans mon phpmyadmin ca fonctionne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `SE_SITUER` SELECT `id_personne`, max(`id_plage`), `id_zone` FROM Plage, Personne, Zone  where id_personne=1;
    Ça ne devrait pas fonctionner !

    Dans la partie SELECT, tu mélanges une fonction de groupage et d'autres colonnes donc tu devrais avoir un GROUP BY.

    En plus, tu fais un produit cartésien entre trois tables donc tu peux avoir un paquet de lignes, ce qui insèrera un paquets de lignes dans ta table !

    Il faut que dans ton code tu récupères en variable l'id_zone et l'id_personne puis tu fais ta requête INSERT :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO SE_SITUER 
    VALUES (1, 
    	SELECT max(id_plage)
    	FROM Plage,
    	$id_zone
    )

    Ensuite, ne t'emmerde pas avec cette saloperie de pseudo SQL de Zend_Framework et donne lui la requête native.
    En rapide, un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = "
    	INSERT INTO SE_SITUER 
    	VALUES (1, 
    		SELECT max(id_plage)
    		FROM Plage,
    		$id_zone
    	)
    ";
    $bd->query($sql);
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/09/2014, 14h31
  2. Réponses: 3
    Dernier message: 08/03/2012, 15h51
  3. Réponses: 2
    Dernier message: 03/10/2007, 16h45
  4. Réponses: 7
    Dernier message: 01/07/2006, 16h40
  5. [VB6] Ajouter numero à champ table qui est en numautomatique
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/01/2006, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo