Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Problème] Récupérer l'id d'une DAO après requête sql

Posted by popeye2604 on 05/07/2013 12:43

Bonjour,

J'ai un problème qui je pense est tout con mais je n'arrive pas à le résoudre et ca fait 3 jours que je passe sur une fonction qui me rend dingue !!! J'ai chercher dans une de mes tables le dernier éléments que j'ai créé, et je souhaite récupérer son id!

Le truc c'est que j'ai bien réussit à récupérer cet élément mais impossible d'avoir son Id et du coup il m'envoie l'erreur suivante:

Undefined property: mysqlDbResultSet::$id_annonce

Voici le résultat de ma requête SQL: Affichage des lignes 1 - 1 ( 1 total, Traitement en 0.0008 sec) [id_annonce: 15 - 15]

SELECT  `annonce`.`id_annonce` ,  `annonce`.`titre` ,  `annonce`.`description` ,  `annonce`.`type_annonce` ,  `annonce`.`photo` 
FROM  `annonce` AS  `annonce` 
WHERE 1 =1
GROUP BY  `annonce`.`id_annonce` 
ORDER BY  `annonce`.`id_annonce` DESC 
LIMIT 1 , 1

La requête a donc bien été effectuée

Voici les codes sous Netbeans:

       
 //on charge la factory des annonces
$annonceFactory =  jDao::get("annonce");
        
// Appel de la méthode XML avec ses arguments et récupération des données
$record = $annonceFactory->getFewRecord(1, 1); // me renvoie bien la dernière ligne !!!!
        
// on modifie le record courantVente
$courantVente->id_utilisateur= $idUserQuiDepose;
$courantVente->id_categorie= $idCategorieRecup;
$courantVente->id_annonce=$record->id_annonce;// PROBLEME: ne récupère pas l'id !!!

Du coup suite à cela j'ai l'erreur:

Undefined property: mysqlDbResultSet::$id_annonce

et ici la requête XML que j'ai créé dans ma DAO annonce:

<method type="select" name="getFewRecord" groupby="id_annonce">
            <parameter name="count"/>
            <parameter name="offset"/>
            <order>
                <orderitem property="id_annonce" way="desc" />
            </order>
            <limit offset="$offset" count="$count"/>
            
        </method>  

Auriez vous une idée de comment récupérer l'id_annonce de mon record svp??

Cordialement,

  [Opened] [Problème] Récupérer l'id d'une DAO après requête sql

Reply #1 Posted by foxmask on 05/07/2013 15:41

c'est normal ...

la methode du DAO est select ce qui retourne un object Record et pas UN enregitrement

cf la doc

Enfin pour ma part pour recuperer le DERNIER enregistrement je ferai un bete et con :

select max(id_annonce) from ...

@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: [Problème] Récupérer l'id d'une DAO après requête sql

Reply #2 Posted by popeye2604 on 05/07/2013 17:38

Merci d'avoir répondu si rapidement!

Je sais que ce que je récupère c'est un record c'est la raison pour laquelle j'utilise

$record = $annonceFactory->getFewRecord(1, 1);
$courantVente->id_annonce=$record->id_annonce;

pour essayer de récupérer l'id_annonce de ce record.

Je vais essayer ton idée de select max, cependant c'est une requête SQL, comment l'intègres tu dans ton controlleur ? Y a-t-il un méthode à créer dans ma factory pour pouvoir récupérer l'id ??

  [Opened] [Problème] Récupérer l'id d'une DAO après requête sql

Reply #3 Posted by popeye2604 on 05/07/2013 18:04

j'ai trouvé une méthode de jDbConnection qui est la suivante:

public function lastIdInTable($fieldName, $tableName){
        $rs = $this->query ('SELECT MAX('.$fieldName.') as ID FROM '.$tableName);
        if (($rs !== null) && $r = $rs->fetch ()){
        return $r->ID;
        }
        return 0;
    }

Mais je n'arrive pas à l'utiliser, j'ai vérifié la requête sql m'ammène au résultat de l'id que je souhaitais à savoir le dernier dans ma table annonce. J'ai essayé:

$idAnnonceRecup= jDbConnection::lastIdInTable('id_annonce',$annonceFactory);

Mais j'ai l'erreur:

Call to undefined method defaultCtrl::query() in C:\Program Files\EasyPHP-12.1\www\jelix\lib\jelix\db\jDbConnection.class.php on line 298

Donc sur cette ligne apparemment: $rs = $this->query ('SELECT MAX('.$fieldName.') as ID FROM '.$tableName);

Sauriez vous comment utiliser cette fonction lastIdInTable ??

  [Opened] [Problème] Récupérer l'id d'une DAO après requête sql

Reply #4 Posted by laurentj on 05/09/2013 18:41

Bonjour,

Première chose : lors de la création d'un record avec jDao, on retrouve l'id du nouvel element dans le record même

$record = ...

$dao->insert($record);

$lastid = $record->id_annonce;

Sinon, pour récupérer le dernier id, c'est très simple (en supposant que c'est un auto increment), il faut faire la methode suivante (de type selectfirst !) :

<method type="selectfirst" name="getlastRecord">
     <order>
         <orderitem property="id_annonce" way="desc" />
     </order>
</method>  

Ensuite, en appellant cette méthode getLastRecord, on récupére un record, et donc son id.

$lastrecord = $dao->getLastRecord();
$id = $lastrecord->id_annonce;

$record = $annonceFactory->getFewRecord(1, 1); // me renvoie bien la dernière ligne !!!!

Non, ça ne renvoi pas la dernière ligne, ça renvoi un resultset ! pas un record ! Il faut donc faire un fetch.

$record = $record->fetch()

La méthode étant de type select, ça renvoi toujours un resultset, donc un iterateur sur la liste des résultats. Si tu veux récupérer un seul enregistrement, il faut que la méthode soit de type selectfirst.

  [Opened] Récupérer l'id d'une DAO après requête sql

Reply #5 Posted by popeye2604 on 05/10/2013 21:05

Super tout marche pour le mieux !! Le problème est résolu! Encore merci d'avoir répondu si rapidement. Ps: Je ne sais pas comment lock le topic...

  [Opened] Récupérer l'id d'une DAO après requête sql

Reply #6 Posted by foxmask on 05/11/2013 21:35

on lock pas :-). on l'indique résolu :-)


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

 
Page
  1. [Problème] Récupérer l'id d'une DAO après requête sql