<?xml version="1.0" encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"

[
<!ENTITY chap1 SYSTEM "intro.xml">
<!ENTITY chap2 SYSTEM "conn-mgt.xml">
]>

<book id="doctrinebook">

  <bookinfo>
    <title>Doctrine Documentation</title>
    <author>
      <firstname>Konsta</firstname>
      <surname>Vesterinen</surname>
      <authorblurb>The creator and lead developer.</authorblurb>
    </author>
    <author>
      <firstname>Ian</firstname>
      <othername>P.</othername>
      <surname>Christian</surname>
      <email>pookey@pookey.co.uk</email>
      <authorblurb>Junior developer and documentation maintainer.</authorblurb>
    </author>
    <copyright>
      <holder>Doctrine Project</holder>
      <year>2007</year>
    </copyright>
    <legalnotice id="legalnotice">
      <para>
        The contents of this document are licensed under the Creative Commons
        <ulink url="http://creativecommons.org/licenses/by-sa/2.0/">Attribution-ShareAlike License</ulink>.
      </para>
    </legalnotice>

    <abstract>
      <para>
        Documentation for the PHP Doctrine project.
      </para>
      <para>
        This document was generated <?dbtimestamp format="Y-m-d H:M:S"?>.
      </para>
    </abstract>
  </bookinfo>

  &chap1;
  &chap2;

  <chapter id="object-relational-mapping">
  <title>Object Relational Mapping</title>
  </chapter>

  <chapter id="working-with-objects">
  <title>Working With Objects</title>
  </chapter>

  <chapter id="configuration">
  <title>Configuration</title>
  </chapter>

  <chapter id="advanced-components">
  <title>Advanced Components</title>
  </chapter>

  <chapter id="dql">
  <title>DQL (Doctrine Query Lanaguage)</title>
  <sect1 id="dql-intro">
    <title>Introduction</title>
    <para>
    Doctrine Query Language(DQL) is an Object Query Language created for helping users in complex object retrieval.
    </para>
    <para>
    You should always consider using DQL(or raw SQL) when retrieving relational data efficiently (eg. when fetching users and their phonenumbers).
    </para>
    <para>
    When compared to using raw SQL, DQL has several benefits:
    </para>

    <itemizedlist>
      <listitem><para>From the start it has been designed to retrieve records(objects) not result set rows.</para></listitem>
      <listitem><para>DQL understands relations so you don't have to type manually sql joins and join conditions.</para></listitem>
      <listitem><para>DQL is portable on different databases</para></listitem>
      <listitem><para>DQL has some very complex built-in algorithms like (the record limit algorithm) which can help developer to efficiently retrieve objects.</para></listitem>
      <listitem><para>It supports some functions that can save time when dealing with one-to-many, many-to-many relational data with conditional fetching.</para></listitem>
    </itemizedlist>

    <para>
      If the power of DQL isn't enough, you should consider using the rawSql API for object population.
    </para>

    <programlisting role="php"><![CDATA[
<?php 
  // DO NOT USE THE FOLLOWING CODE 
  // (using many sql queries for object population):

  $users = $conn->getTable('User')->findAll();
  foreach($users as $user) {
    print $user->name."\n";
    foreach($user->Phonenumber as $phonenumber) {
        print $phonenumber."\n";
    }
  }

  // same thing implemented much more efficiently: 
  // (using only one sql query for object population)

  $users = $conn->query("FROM User.Phonenumber");
  foreach($users as $user) {
    print $user->name."\n";
    foreach($user->Phonenumber as $phonenumber) {
        print $phonenumber."\n";
    }
  }
?>]]></programlisting>
  </sect1>

  </chapter>

  <chapter id="native-sql">
  <title>Native SQL</title>
  </chapter>

  <chapter id="transactions">
  <title>Transactions</title>
  </chapter>

  <chapter id="caching">
  <title>Caching</title>
  </chapter>

  <chapter id="database-abstraction">
  <title>Database Abstraction</title>
  </chapter>

  <chapter id="technology">
  <title>Technology</title>
  </chapter>

  <chapter id="real-world-examples">
  <title>Real World Examples</title>
  </chapter>

  <chapter id="coding-standards">
  <title>Coding Standards</title>
  </chapter>

</book>
