2006-09-29 15:17:16 +04:00
|
|
|
Doctrine Query Language(DQL) is an Object Query Language created for helping users in complex object retrieval.
|
|
|
|
You should always consider using DQL(or raw SQL) when retrieving relational data efficiently (eg. when fetching users and their phonenumbers).
|
|
|
|
<br \><br \>
|
|
|
|
When compared to using raw SQL, DQL has several benefits: <br \>
|
|
|
|
<ul>
|
|
|
|
<li \>From the start it has been designed to retrieve records(objects) not result set rows
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \>DQL understands relations so you don't have to type manually sql joins and join conditions
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \>DQL has some very complex built-in algorithms like (the record limit algorithm) which can help
|
|
|
|
developer to efficiently retrieve objects
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \>It supports some many functions that help dealing with one-to-many, many-to-many relational data with conditional fetching.
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
If the power of DQL isn't enough, you should consider using the rawSql API for object population.
|
2006-10-06 20:50:00 +04:00
|
|
|
|
|
|
|
Standard DQL query consists of the following parts:
|
|
|
|
<ul>
|
|
|
|
<li \> a FROM clause, which provides declarations that designate the domain to which the expressions
|
|
|
|
specified in the other clauses of the query apply.
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \> an optional WHERE clause, which may be used to restrict the results that are returned by the
|
|
|
|
query.
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \> an optional GROUP BY clause, which allows query results to be aggregated in terms of
|
|
|
|
groups.
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \> an optional HAVING clause, which allows filtering over aggregated groups.
|
|
|
|
</ul>
|
|
|
|
<ul>
|
|
|
|
<li \> an optional ORDER BY clause, which may be used to order the results that are returned by the
|
|
|
|
query.
|
|
|
|
</ul>
|
|
|
|
<br \>
|
|
|
|
In BNF syntax, a select statement is defined as:
|
|
|
|
select_statement :: = select_clause from_clause [where_clause] [groupby_clause]
|
|
|
|
[having_clause] [orderby_clause]
|
|
|
|
<br \>
|
|
|
|
A select statement must always have a SELECT and a FROM clause. The square brackets [] indicate
|
|
|
|
that the other clauses are optional.
|