ソースを参照

Fixing Query::count() so that formatters added in beforeFind are not
executed

Jose Lorenzo Rodriguez 12 年 前
コミット
aa04995095
1 ファイル変更9 行追加10 行削除
  1. 9 10
      src/ORM/Query.php

+ 9 - 10
src/ORM/Query.php

@@ -914,20 +914,19 @@ class Query extends DatabaseQuery {
 
 		$count = ['count' => $query->func()->count('*')];
 		if (!count($query->clause('group')) && !$query->clause('distinct')) {
-			return (int)$query
+			$statement = $query
 				->select($count, true)
-				->hydrate(false)
-				->first()['count'];
+				->execute();
+		} else {
+			// Forcing at least one field to be selected
+			$query->select($query->newExpr()->add('1'));
+			$statement = $this->connection()->newQuery()
+				->select($count)
+				->from(['count_source' => $query])
+				->execute();
 		}
 
-		// Forcing at least one field to be selected
-		$query->select($query->newExpr()->add('1'));
-		$statement = $this->connection()->newQuery()
-			->select($count)
-			->from(['count_source' => $query])
-			->execute();
 		$result = $statement->fetch('assoc')['count'];
-
 		$statement->closeCursor();
 		return (int)$result;
 	}