Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-09-2011 13:40:32

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

[resolut]comment récupérer mon résultat ?

bonjour, je souhaite récupérer un résultat qui est null mais je sais pas comment le récupérer

voici mon modèle

Code:

[lang=php]
class Application_Model_DbTable_Facture extends Zend_Db_Table_Abstract
{
    protected $_name = 'factures';
    
    public function maxfacture()
    {
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql="SELECT max(id_facture) FROM factures";
        $id_max=$db->query($sql);
        Zend_Debug::dump($id_max);
    }
}

pour le moment je dans ma table facture je n'ai pas d'id factures enregistrer
ici comment je fait pour afficher NULL ?

je vous remercie d'avance pour votre réponse smile

Dernière modification par keokaz (14-09-2011 23:33:33)

Hors ligne

 

#2 14-09-2011 13:54:38

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: [resolut]comment récupérer mon résultat ?

Hello,
A priori je dirais
return $id_max;

Hors ligne

 

#3 14-09-2011 15:33:52

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

Re: [resolut]comment récupérer mon résultat ?

merci de votre réponse, mais si je fait

Code:

        $id_max=$db->query($sql);
        Zend_Debug::dump($id_max);
echo $id_max;

j'ai ceci

Code:

Catchable fatal error: Object of class Zend_Db_Statement_Pdo could not be converted to string in /var/www/myboutik/application/models/DbTable/Facture.php on line 13

Dernière modification par keokaz (14-09-2011 15:40:27)

Hors ligne

 

#4 14-09-2011 15:45:41

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

Re: [resolut]comment récupérer mon résultat ?

Tout est dans la doc...

Code:

[lang=php]
    $stmt = $db->query('SELECT * FROM bugs');
    $rows = $stmt->fetchAll();
    echo $rows[0]['bug_description'];

Donc ici il te manque un fetchAll, ou un while($result = $stmt->fetch()) pour récupérer ton jeu de résultats.

Pour le traitement, tu peux faire un count sur ton rowset par exemple, si count(rowset) < 1 pas de résultat, sinon traitement des résultats.

Hors ligne

 

#5 14-09-2011 15:55:26

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

Re: [resolut]comment récupérer mon résultat ?

merci de ta réponse théocite,  smile

je viens de testé avec un fetchOnes

Code:

     
[lang=php]
<?php

class Application_Model_DbTable_Facture extends Zend_Db_Table_Abstract
{
    protected $_name = 'factures';
    
    public function maxfacture()
    {
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql="SELECT max(id_facture) FROM factures";
        echo $sql;
        $id_max=$db->fetchOne($sql);
        Zend_Debug::dump($id_max);
        echo $id_max;//affiche bien null 
    }
}

qu'en pense tu au lieu d'utiliser fetchAll() ?
cette id_facture me sert a determiner la prochaine id_facture
dans cette table l'id_facture n'est pas un auto-incrémente, il peut avoir plusieurs même id_facture

Dernière modification par keokaz (14-09-2011 15:57:49)

Hors ligne

 

#6 14-09-2011 16:07:39

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

Re: [resolut]comment récupérer mon résultat ?

Le fetchOne te permet en effet de récupérer une seule ligne, hors tu désires récupérer 0 lignes, donc fetchAll et fetchOne ont le même comportement.

Ah oui tu fais un count, j'avais omis cet aspect. C'est donc bien un fetchOne qu'il te faut.

Par contre, je raccourcirais le code...

Code:

[lang=php]
<?php
 
class Application_Model_DbTable_Facture extends Zend_Db_Table_Abstract
{
    protected $_name = 'factures';
     
    public function maxfacture()
    {
        $result = $this->fetchOne('max(id_facture) as max');
        return $result->max;
    }
}

Là c'est pas testé mais ça doit donner quelque chose dans ce goût :
$result est un Zend_Db_Table_Row
on va donc lui demander son attribut (champ de la bd).

Hors ligne

 

#7 14-09-2011 16:09:27

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [resolut]comment récupérer mon résultat ?

keokaz a écrit:

merci de ta réponse théocite,  smile

je viens de testé avec un fetchOnes

Code:

     
[lang=php]
<?php

class Application_Model_DbTable_Facture extends Zend_Db_Table_Abstract
{
    protected $_name = 'factures';
    
    public function maxfacture()
    {
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql="SELECT max(id_facture) FROM factures";
        echo $sql;
        $id_max=$db->fetchOne($sql);
        Zend_Debug::dump($id_max);
        echo $id_max;//affiche bien null 
    }
}

qu'en pense tu au lieu d'utiliser fetchAll() ?

Dans la mesure où tu ne peux récupérer qu'un seul tuple, la fonction "fetchOne" est en effet plus appropriée.

keokaz a écrit:

cette id_facture me sert a determiner la prochaine id_facture
dans cette table l'id_facture n'est pas un auto-incrémente, il peut avoir plusieurs même id_facture

O_o

Quel est l'intérêt d'avoir plusieurs fois le même id_facture ?!? Un id n'est pas censé être un identifiant unique ?

Dernière modification par f.garoby (14-09-2011 16:09:42)

Hors ligne

 

#8 14-09-2011 16:32:56

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

Re: [resolut]comment récupérer mon résultat ?

merci de toute ces réponse

Code:

Quel est l'intérêt d'avoir plusieurs fois le même id_facture ?!? Un id n'est pas censé être un identifiant unique ?

ma table contient

Code:

id_lignecommande | id_facture |id_client

avec une facture je peux commander plusieurs chose

merci Téocite, j'ai testé ta solution

Code:

Fatal error: Call to undefined method Application_Model_DbTable_Facture::fetchOne() in /var/www/mytest/application/models/DbTable/Facture.php on line 22

la ligne 22

Code:

  $result = $this->fetchOne('max(id_facture) as max');

donc pour le moment mon scripte est comme ceci

Code:

[lang=php]
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql="SELECT max(id_facture) FROM factures";
        $id_max=$db->fetchOne($sql);
        $id_max=$id_max+1;
        $this->id_max = $id_max;//je viens de penser que je n'avais pas besoin de transmettre dans le controlleur, tous ce fait dans cette classe

Dernière modification par keokaz (14-09-2011 16:33:16)

Hors ligne

 

#9 14-09-2011 16:36:01

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

Re: [resolut]comment récupérer mon résultat ?

Essaye avec fetchRow plutôt que fetchOne.

Tout comme f.garoby, je ne comprends pas ton système, qui au passage risque de compromettre l'intégrité des données contenues dans ta base... Je t'aide sur les problèmes que tu poses, mais je ne suis pas forcément en phase avec les rudiments du projet...

Dernière modification par Théocrite (14-09-2011 16:38:07)

Hors ligne

 

#10 14-09-2011 17:50:21

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

Re: [resolut]comment récupérer mon résultat ?

je dois crée 2 tables alors?

1 table facture

Code:

id_facture |id_personne|date

et une autre table commande ?

Code:

id_ligne commande | id_facture

la ligne de commande serai un auto-incrémente

Dernière modification par keokaz (14-09-2011 17:54:27)

Hors ligne

 

#11 14-09-2011 18:01:03

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

Re: [resolut]comment récupérer mon résultat ?

En fait j'ai pas suivi la manip là...

id_lignecommande | id_facture |id_client

A quoi ça correspond tout ça ?

Hors ligne

 

#12 14-09-2011 18:21:23

keokaz
Membre
Date d'inscription: 06-07-2011
Messages: 113

Re: [resolut]comment récupérer mon résultat ?

Au début je souhaitai enregistrer mes commande dans un seul tableau qui ressemblerai à cela

Code:

Table FACTURE
id_ligne | id_facture | id_client

id_ligne est auto incrémente
id_facture correspond au numéro de la facture par exemple si jean commande 3 articles j'aurai 3 id_article différents

Code:

id_ligne |id_facture |id_client|---id_article
---1-----| -----9------|-----98---|----56----- //56 une pomme
---2-----|-----9-------|----98----|-----4-----//4 un stylo
---3-----|-----9-------|----98----|-----10-----

le 98 c'est jean j'ai une table client qui a un id et un nom
le 56 c'est la pomme j'ai une table article qui a un id_article avec le nom des articles
le 4 c'est le stylo

maintenant je vais essayer de suivre vos conseille, je vais essayer de scinder cette table en deux

donc 1 table facture qui contient
l'id de la facture , se sera l'autoincrémentation + l'id du client

et une autre table commande(peut être qu'il vaut mieux trouver un autre nom, je n'ai pas encore trouvé le nom adéquate)
avec id_commande, se sera l'auto incrémentation (clef primaire)  avec un id_produit , une quantité

Dernière modification par keokaz (14-09-2011 18:23:11)

Hors ligne

 

#13 15-09-2011 08:24:33

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [resolut]comment récupérer mon résultat ?

Ok, c'est déjà plus clair ainsi.

Là comme ça, j'ai l'impression que tu es tout simplement face à une classique relation 1-N/1-N : une facture peut porter sur 1 à N articles et 1 article peut être facturé 1 à N fois. Donc il te faut une table intermédiaire entre ces deux-là.

Ton schéma de tables pourrait donc être le suivant :
* une table "clients" (tu l'as déjà) ;
* une table "articles" (tu l'as déjà) ;
* une table "facture", avec id_facture comme clé primaire et id_client qui est la clé étrangère provenant de la table "clients" ;
* une table "facture_articles", qui est la table intermédiaire entre tes tables "factures" et "articles" (du fait de la ration 1-N/1-N évoquée plus haut), avec id_facture et id_article. C'est cette table qui contiendra une ligne par article facturé pour une facture donnée

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