X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FApi4%2FGeneric%2FDAOGetAction.php;h=ab7d85b966d3ab1802b2b0dd2219a95f54b34854;hb=6bcf9fe3712f184a9bcf77df22199addd0a7ab46;hp=100173d9628da9a5111c692bfd193425a97a473f;hpb=5c50035da722d2d4b9f4ff2e30faeb6ba9772318;p=civicrm-core.git diff --git a/Civi/Api4/Generic/DAOGetAction.php b/Civi/Api4/Generic/DAOGetAction.php index 100173d962..ab7d85b966 100644 --- a/Civi/Api4/Generic/DAOGetAction.php +++ b/Civi/Api4/Generic/DAOGetAction.php @@ -29,6 +29,9 @@ use Civi\Api4\Query\Api4SelectQuery; * 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; @@ -44,6 +47,22 @@ class DAOGetAction extends AbstractGetAction { */ 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(); @@ -63,4 +82,44 @@ class DAOGetAction extends AbstractGetAction { 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; + } + }