На мой взгляд это баг. Заключается он в следующем:
Если собрать запрос так, чтобы в его селекте оказались несуществующие в таблице поля, потом сделать по одному из них HAVING, то получим эксепшн, примерно такой:
Код: Выделить всё
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'age' in 'having clause'
The SQL being executed was: SELECT COUNT(*) FROM `user` HAVING age=1
Error Info: Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'age' in 'having clause'
Код: Выделить всё
public function search($params)
{
$query = User::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->addSelect(
[
'*',
'age'=>new \yii\db\Expression('NOW()') // возьмём простое sql выражение для примера
]);
$query->andHaving('age=1'); // в хевин тоже поставим простое сравнение не несущее смысла в реальном мире
return $dataProvider;
}
Код: Выделить всё
protected function prepareTotalCount()
{
if (!$this->query instanceof QueryInterface) {
throw new InvalidConfigException('The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.');
}
$query = clone $this->query;
return (int) $query->limit(-1)->offset(-1)->orderBy([])->count('*', $this->db);
}