Qcodo Query Clauses
All Qcodo Query
method calls take in an optional set of QQ Clauses
. QQ Clauses
alter the result set by performing the equivalents of most of your major SQL clauses, including JOIN, ORDER BY,
GROUP BY and DISTINCT.
The following is the list of QQ Clause classes and what parameters they take:
- QQ::OrderBy(array/list of QQNodes)
- QQ::GroupBy(array/list of QQNodes)
- QQ::Count(QQNode, string)
- QQ::Minimum(QQNode, string)
- QQ::Maximum(QQNode, string)
- QQ::Average(QQNode, string)
- QQ::ExpandAsArray(QQNode for an Association Table)
- QQ::LimitInfo(integer[, integer = 0])
follow the conventions of SQL ORDER BY and GROUP BY. It takes in a
list of one or more QQ Column Nodes
. This list could be a parameterized list and/or an array.
Specifically for OrderBy
, to specify a QQ Node
that you wish to order by in descending
order, add a "false" after the QQ Node. So for example, QQ::OrderBy(QQN::Person()->LastName, false,
will do the SQL equivalent of "ORDER BY last_name DESC, first_name ASC".
are aggregation-related clauses, and
only work when GroupBy
is specified. These methods take in an attribute name, which
can then be restored using GetVirtualAttribute()
on the object.
deals with Object Expansion / Early Binding. More on this
can be seen in the "Early Binding of Related Objects" example.
will limit the result set. The first integer is the maximum number of rows
you wish to limit the query to. The optional
second integer is the offset (if any).
And finally, Distinct
will cause the query to be called with SELECT DISTINCT.
All clauses must be wrapped around a single QQ::Clause()
call, which takes in any
number of clause classes for your query.
Select all People, Ordered by Last Name then First Name
Select all People, Ordered by Last Name then First Name, Limited to the first 4 results
Select all Projects and the Count of Team Members (if applicable)
ACME Website1 (0 team members)
State College HR System (5 team members)
xx (8 team members)
ACME Payment (1 team members)