public function testHavingConditions() { $c = new ModelCriteria('bookstore', 'Book'); $c->condition('cond1', 'Book.Title <> ?', 'foo'); $c->condition('cond2', 'Book.Title like ?', '%bar%'); $c->having(array('cond1', 'cond2')); $sql = "SELECT FROM HAVING (book.TITLE <> :p1 AND book.TITLE like :p2)"; $params = array(array('table' => 'book', 'column' => 'TITLE', 'value' => 'foo'), array('table' => 'book', 'column' => 'TITLE', 'value' => '%bar%')); $this->assertCriteriaTranslation($c, $sql, $params, 'having() accepts an array of named conditions'); $c = new ModelCriteria('bookstore', 'Book'); $c->condition('cond1', 'Book.Title <> ?', 'foo'); $c->condition('cond2', 'Book.Title like ?', '%bar%'); $c->having(array('cond1', 'cond2'), Criteria::LOGICAL_OR); $sql = "SELECT FROM HAVING (book.TITLE <> :p1 OR book.TITLE like :p2)"; $this->assertCriteriaTranslation($c, $sql, $params, 'having() accepts an array of named conditions with an operator'); }
public function testHavingWithColumn() { $c = new ModelCriteria('bookstore', 'Book'); $c->withColumn('SUBSTRING(Book.Title, 1, 4)', 'title_start'); $c->having('title_start = ?', 'foo', PDO::PARAM_STR); $sql = 'SELECT book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID, SUBSTRING(book.TITLE, 1, 4) AS title_start FROM `book` HAVING title_start = :p1'; $params = array(array('table' => null, 'type' => 2, 'value' => 'foo')); $this->assertCriteriaTranslation($c, $sql, $params, 'having() accepts a string clause'); $c->find($this->con); $expected = 'SELECT book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID, SUBSTRING(book.TITLE, 1, 4) AS title_start FROM `book` HAVING title_start = \'foo\''; $this->assertEquals($expected, $this->con->getLastExecutedQuery()); }