An ActiveQuery can be a normal query or be used in a relational context.
ActiveQuery instances are usually created by [[ActiveRecord::find()]] and [[ActiveRecord::findBySql()]].
Relational queries are created by [[ActiveRecord::hasOne()]] and [[ActiveRecord::hasMany()]].
Normal Query
------------
ActiveQuery mainly provides the following methods to retrieve the query results:
- ActiveQuery::one: returns a single record populated with the first row of data.
- ActiveQuery::all: returns all records based on the query results.
- [[count()]]: returns the number of records.
- [[sum()]]: returns the sum over the specified column.
- [[average()]]: returns the average over the specified column.
- [[min()]]: returns the min over the specified column.
- [[max()]]: returns the max over the specified column.
- [[scalar()]]: returns the value of the first column in the first row of the query result.
- [[column()]]: returns the value of the first column in the query result.
- [[exists()]]: returns a value indicating whether the query result has data or not.
Because ActiveQuery extends from Query, one can use query methods, such as [[where()]],
[[orderBy()]] to customize the query options.
ActiveQuery also provides the following additional query options:
- [[with()]]: list of relations that this query should be performed with.
- ActiveQuery::joinWith: reuse a relation query definition to add a join to a query.
- [[indexBy()]]: the name of the column by which the query result should be indexed.
- [[asArray()]]: whether to return each record as an array.
These options can be configured using methods of the same name. For example:
php
$customers = Customer::find()->with('orders')->asArray()->all();
Relational query
----------------
In relational context ActiveQuery represents a relation between two Active Record classes.
Relational ActiveQuery instances are usually created by calling [[ActiveRecord::hasOne()]] and
[[ActiveRecord::hasMany()]]. An Active Record class declares a relation by defining
a getter method which calls one of the above methods and returns the created ActiveQuery object.
A relation is specified by [[link]] which represents the association between columns
of different tables; and the multiplicity of the relation is indicated by [[multiple]].
If a relation involves a junction table, it may be specified by [[via()]] or ActiveQuery::viaTable method.
These methods may only be called in a relational context. Same is true for [[inverseOf()]], which
marks a relation as inverse of another relation and ActiveQuery::onCondition which adds a condition that
is to be added to relational query join condition.