Correct detect count records in SQlCriteria with use group by
This commit is contained in:
		@ -82,14 +82,7 @@ class SqlCriteria
 | 
				
			|||||||
    public function count()
 | 
					    public function count()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	    $this->defineJoinExpressions();
 | 
						    $this->defineJoinExpressions();
 | 
				
			||||||
	    $sql_expression_backup = $this->sql_expression;
 | 
					        $count = $this->model->count(array(), '', $this->where, null, $this->group_by, $this->sql_expression, $this->sql_expression_params)->fetchField('count');
 | 
				
			||||||
        if ($this->sql_expression && !strstr('COUNT(*)', $this->sql_expression)) {
 | 
					 | 
				
			||||||
            $this->sql_expression = preg_replace('#^SELECT .+ FROM#', 'SELECT COUNT(*) as count FROM', $this->sql_expression);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            $this->sql_expression = 'SELECT COUNT(*) as count FROM :table';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        $count = $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;
 | 
						    return $count;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -226,6 +226,22 @@ abstract class SqlModel extends Model
 | 
				
			|||||||
        return new SqlResultProvider($result);
 | 
					        return new SqlResultProvider($result);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function count($select, $distinct, $where,$heaving = null, $group_by = null, $sql_expression = null, $sql_expression_params = array(), $cache_key = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $select = $this->db->selectExpr($select, $distinct);
 | 
				
			||||||
 | 
					        $where = $this->db->whereExpr($where);
 | 
				
			||||||
 | 
					        $group_by = $this->db->groupByExpr($group_by);
 | 
				
			||||||
 | 
					        $result = $this->query(
 | 
				
			||||||
 | 
					            'SELECT COUNT(*) as count FROM (' .
 | 
				
			||||||
 | 
					            (($sql_expression) ? $sql_expression : ('SELECT ' . $select . ' FROM ' . $this->identify($this->table())))
 | 
				
			||||||
 | 
					                . (($where) ? (' WHERE ' . $where) : '')
 | 
				
			||||||
 | 
					                . (($group_by) ? (' GROUP BY ' . $group_by) : '') . ') AS x',
 | 
				
			||||||
 | 
					            $sql_expression_params,
 | 
				
			||||||
 | 
					            $cache_key
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        return new SqlResultProvider($result);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @param $sql_expression null
 | 
					     * @param $sql_expression null
 | 
				
			||||||
     * @param $sql_expression_params array
 | 
					     * @param $sql_expression_params array
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user