This commit is contained in:
2021-11-09 13:58:08 +08:00
parent f8718fa4de
commit 8c98ce8c7f
3 changed files with 13 additions and 9 deletions
+1 -3
View File
@@ -237,9 +237,7 @@ class ActiveQuery extends Component implements ISqlBuilder
*/ */
public function count(): int public function count(): int
{ {
$clone = clone $this; $data = $this->execute($this->builder->count())->one();
$clone->select = ['COUNT(*)'];
$data = $this->execute($clone->builder->count())->one();
if ($data && is_array($data)) { if ($data && is_array($data)) {
return (int)array_shift($data); return (int)array_shift($data);
} }
+7 -5
View File
@@ -240,7 +240,7 @@ class SqlBuilder extends Component
if (empty($this->query->from) && !empty($this->query->modelClass)) { if (empty($this->query->from) && !empty($this->query->modelClass)) {
$this->query->from($this->query->getTable()); $this->query->from($this->query->getTable());
} }
return $this->_prefix(); return $this->_prefix(false, true);
} }
@@ -256,14 +256,15 @@ class SqlBuilder extends Component
/** /**
* @param bool $hasOrder * @param bool $hasOrder
* @param bool $isCount
* @return string * @return string
* @throws Exception * @throws Exception
*/ */
private function _prefix(bool $hasOrder = false): string private function _prefix(bool $hasOrder = false, bool $isCount = false): string
{ {
$select = ''; $select = '';
if (!empty($this->query->from)) { if (!empty($this->query->from)) {
$select = $this->_selectPrefix(); $select = $this->_selectPrefix($isCount);
} }
$select = $this->_wherePrefix($select); $select = $this->_wherePrefix($select);
if (!empty($this->query->attributes) && is_array($this->query->attributes)) { if (!empty($this->query->attributes) && is_array($this->query->attributes)) {
@@ -302,12 +303,13 @@ class SqlBuilder extends Component
/** /**
* @param bool $isCount
* @return string * @return string
* @throws Exception * @throws Exception
*/ */
private function _selectPrefix(): string private function _selectPrefix(bool $isCount): string
{ {
$select = $this->builderSelect($this->query->select) . ' FROM ' . $this->tableName(); $select = $this->builderSelect($this->query->select, $isCount) . ' FROM ' . $this->tableName();
if (!empty($this->query->alias)) { if (!empty($this->query->alias)) {
$select .= $this->builderAlias($this->query->alias); $select .= $this->builderAlias($this->query->alias);
} }
+5 -1
View File
@@ -61,10 +61,14 @@ trait Builder
/** /**
* @param null $select * @param null $select
* @param bool $isCount
* @return string * @return string
*/ */
#[Pure] private function builderSelect($select = NULL): string #[Pure] private function builderSelect($select = NULL, bool $isCount = false): string
{ {
if ($isCount) {
return "SELECT COUNT(*)";
}
if (empty($select)) { if (empty($select)) {
return "SELECT *"; return "SELECT *";
} }