Adds a condition or set of conditions to be used in the HAVING clause for this
query. This method operates in exactly the same way as the method where()
does. Please refer to its documentation for an insight on how to using each
parameter.
public having ( string | array | Cake\Database\ExpressionInterface | callable | null $conditions = null, array $types = [], boolean $overwrite = false ) | ||
$conditions | string | array | Cake\Database\ExpressionInterface | callable | null | The having conditions. |
$types | array | associative array of type names used to bind values to query |
$overwrite | boolean | whether to reset conditions with passed list or not |
/** * Tests that having() behaves pretty much the same as the where() method * * @return void */ public function testSelectHaving() { $query = new Query($this->connection); $result = $query->select(['total' => 'count(author_id)', 'author_id'])->from('articles')->join(['table' => 'authors', 'alias' => 'a', 'conditions' => 'author_id = a.id'])->group('author_id')->having(['count(author_id) <' => 2], ['count(author_id)' => 'integer'])->execute(); $expected = [['total' => 1, 'author_id' => 3]]; $this->assertEquals($expected, $result->fetchAll('assoc')); $result = $query->having(['count(author_id)' => 2], ['count(author_id)' => 'integer'], true)->execute(); $expected = [['total' => 2, 'author_id' => 1]]; $this->assertEquals($expected, $result->fetchAll('assoc')); $result = $query->having(function ($e) { return $e->add('count(author_id) = 1 + 1'); }, [], true)->execute(); $expected = [['total' => 2, 'author_id' => 1]]; $this->assertEquals($expected, $result->fetchAll('assoc')); }