使用Doctrine DBAL计算SELECT查询的行数


Using Doctrine DBAL to count number of rows from SELECT query

好的,所以我正在寻找一种简洁的方法来使用Doctrine DBAL计算SELECT查询的行数。

我知道我可以SELECT COUNT(*),但在获取结果时需要对数组进行排序。或者,有人建议查看getScalarResult()。但除了DQL(这是一个不同的项目)之外,我似乎找不到任何关于这方面的文档。

那么,最简洁的方法是什么呢?我想这是因为我习惯了伟大的MySQLI属性num_rows

Doctrine DBAL的另一种方法是将计数作为字段并返回列

    $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);

实际上我以为我看起来很努力,但我刚刚发现了这个计数记录返回MySQL原则

因此,实现这一点的方法是通过rowCount()方法。

示例:

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

我喜欢使用查询生成器。一个例子:

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

这是@DonkeyKong对Doctrine DBAL>=的更新版本2.13:

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