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

Doctrine2 PHP Discussion :

Récuperer la valeur de l'auto-incrément d'une table


Sujet :

Doctrine2 PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 46
    Points : 34
    Points
    34
    Par défaut Récuperer la valeur de l'auto-incrément d'une table
    Bonjour a tous,

    J'aimerais savoir si il avait une façon de récupérer la valeur de l'auto increment d'une table via doctrine?

    j'ai tester ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW TABLE STATUS LIKE 'shop_produit';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery('SHOW TABLE STATUS LIKE KevinrolinbeShopBundle:ShopProduit');
    $req = $query->getResult();
    La requête est correcte mais une fois interpretée par doctrine, il n'en veux pas car pour lui il faut obligatoirement un SELECT, UPDATE ou DELETE dans la requête...


    j'ai alors tester ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'shop_produit';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery("SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'shop_produit';");
    $req = $query->getResult();
    La aussi, la requete est correcte mais encore une fois, doctrine n'en veut pas:
    "'INFORMATION_SCHEMA.TABLES': Error: Class 'INFORMATION_SCHEMA' is not defined"
    L'un de vous aurait-il une idée?
    Merci d'avance,
    Kevin

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    le DQL n'est pas fait pour ça, chaque BDD a sa façon de gérer l'auto-increment (sequence avec Oracle et Postgres par ex).
    Il faut le faire directement en SQL.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Serait-ce exagérer de te demander la méthode à utiliser ?
    J'ai cherché dans la doc de doctrine (http://docs.doctrine-project.org/en/....html#examples) mais je t'avoue que cela reste un peu flou.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->getDoctrine()->getEntityManager()->getConnection();
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->get('doctrine.dbal.default_connection');
    renvoit un objet Doctrine\DBAL\Connection permettant de faire des requetes natives et de récupérer des résultats sans les mapper à des entité.
    http://docs.doctrine-project.org/pro...ation.html#api
    les méthodes proposés sont plus ou moins celles de PDO.

    le lien que tu as consulté permet également de faire des requetes natives, mais dans le but de mapper les résultats à des entités.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour tes précieux conseils !

    Voici ma solution finale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = "SELECT AUTO_INCREMENT as last_id FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'shop_produit'";
    $connection=$this->getDoctrine()->getEntityManager()->getConnection();
    $stmt = $connection->prepare($req);
    $stmt->execute();
    $row = $stmt->fetch();
    $typeId = $row['last_id'];
    Encore merci.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2011, 17h22
  2. Réponses: 2
    Dernier message: 20/03/2011, 19h06
  3. Réponses: 2
    Dernier message: 11/02/2008, 21h47
  4. Comment obtenir un champs auto incrémenté dans une table DBase IV ?
    Par souminet dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/12/2007, 13h55
  5. Récuperer l'identifiant d'un auto-incrémente
    Par MANU_2 dans le forum Bases de données
    Réponses: 5
    Dernier message: 19/10/2005, 01h18

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