11 votes

Utilisation de Doctrine DBAL pour compter le nombre de lignes d'une requête SELECT

OK, je cherche un moyen simple et rapide de compter le nombre de lignes d'une requête SELECT en utilisant Doctrine DBAL.

Je sais que je pourrais SELECT COUNT(*) mais je dois alors trier le tableau lorsque je récupère les résultats. Il a également été suggéré de se pencher sur la question suivante getScalarResult() . Mais je n'arrive pas à trouver de documentation à ce sujet, si ce n'est dans DQL (qui est un autre projet).

Alors, quelle est la meilleure façon de le faire ? Je suppose que c'est parce que j'ai l'habitude de l'attribut MySQLI. num_rows !

21voto

donkeykong Points 33

Une autre façon de faire cela avec Doctrine DBAL est de récupérer le compte comme un champ et de retourner la colonne.

    $sql = "SELECT count(*) AS Total FROM myTable WHERE myId = :myId";
    $stmt = $conn->prepare($sql);
    $stmt->bindValue('myId', $myId, PDO::PARAM_INT);
    $stmt->execute();
    $count = $stmt->fetchColumn(0);

17voto

penguin Points 159

En fait, je pensais avoir bien cherché, mais je viens de tomber sur ça. Compter les enregistrements retournés Doctrine MySQL

Le moyen d'y parvenir est donc d'utiliser la fonction rowCount() méthode.

Exemple :

$num_rows = $conn->executeQuery("SELECT * FROM users")->rowCount();

4voto

escopecz Points 73

J'aime utiliser le générateur de requêtes. Un exemple :

    $queryBuilder = $connection->createQueryBuilder();
    $queryBuilder->select('COUNT(*)');
    $queryBuilder->from("the_table");
    $queryBuilder->where('some_column = :theValue');
    $queryBuilder->setParameter('theValue', $someValue);

    return (int) $queryBuilder->execute()->fetchColumn();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X