* Use the `select` param to determine which fields are returned, defaults to `[*]`.
*
* Perform joins on other related entities using a dot notation.
+ *
+ * @method $this setHaving(array $clauses)
+ * @method array getHaving()
*/
class DAOGetAction extends AbstractGetAction {
use Traits\DAOActionTrait;
*/
protected $select = [];
+ /**
+ * Field(s) by which to group the results.
+ *
+ * @var array
+ */
+ protected $groupBy = [];
+
+ /**
+ * Clause for filtering results after grouping and filters are applied.
+ *
+ * Each expression should correspond to an item from the SELECT array.
+ *
+ * @var array
+ */
+ protected $having = [];
+
public function _run(Result $result) {
$this->setDefaultWhereClause();
$this->expandSelectClauseWildcards();
return $result;
}
+ /**
+ * @return array
+ */
+ public function getGroupBy(): array {
+ return $this->groupBy;
+ }
+
+ /**
+ * @param array $groupBy
+ * @return $this
+ */
+ public function setGroupBy(array $groupBy) {
+ $this->groupBy = $groupBy;
+ return $this;
+ }
+
+ /**
+ * @param string $field
+ * @return $this
+ */
+ public function addGroupBy(string $field) {
+ $this->groupBy[] = $field;
+ return $this;
+ }
+
+ /**
+ * @param string $expr
+ * @param string $op
+ * @param mixed $value
+ * @return $this
+ * @throws \API_Exception
+ */
+ public function addHaving(string $expr, string $op, $value = NULL) {
+ if (!in_array($op, \CRM_Core_DAO::acceptedSQLOperators())) {
+ throw new \API_Exception('Unsupported operator');
+ }
+ $this->having[] = [$expr, $op, $value];
+ return $this;
+ }
+
}