Correct use criteria with use count and join.

This commit is contained in:
2014-06-03 19:56:30 +04:00
parent c62620593f
commit d710b19fed

View File

@ -70,6 +70,7 @@ class SqlCriteria
$this->sql_expression = 'SELECT ' . $select . ' FROM :table'; $this->sql_expression = 'SELECT ' . $select . ' FROM :table';
} }
$this->sql_expression .= ' ' . implode(' ', $this->sql_join_expressions); $this->sql_expression .= ' ' . implode(' ', $this->sql_join_expressions);
$this->sql_join_expressions = null;
} }
} }
@ -80,13 +81,17 @@ class SqlCriteria
public function count() public function count()
{ {
if ($this->sql_expression && strpos($this->sql_expression, 'COUNT(*) as count')) { $this->defineJoinExpressions();
; $sql_expression_backup = $this->sql_expression;
if ($this->sql_expression) {
$select = $this->model->getDb()->selectExpr($this->select, $this->distinct);
$this->sql_expression = str_replace($select, 'COUNT(*) as count', $this->sql_expression);
} else { } else {
$this->sql_expression = 'SELECT COUNT(*) as count FROM :table'; $this->sql_expression = 'SELECT COUNT(*) as count FROM :table';
} }
$this->defineJoinExpressions(); $count = $this->model->find(array(), '', $this->where, null, null, null, null, $this->sql_expression, $this->sql_expression_params)->fetchField('count');
return $this->model->find(array(), '', $this->where, null, null, null, null, $this->sql_expression, $this->sql_expression_params)->fetchField('count'); $this->sql_expression = $sql_expression_backup;
return $count;
} }
private function defineJoinTablePlaceholder($table_name) private function defineJoinTablePlaceholder($table_name)