DoctrineでSQLを直接実行する

ORMの構文を必ず使う必要なんてないのですよ。

<?php
// なんでもいいのでConnectionとってくる
$employeeTable = Doctrine_Core::getTable('Employee');
$con = $employeeTable->getConnection();

$sql = "SELECT * FROM employee where YEAR(employed_at) = :year";
$employees = $con->fetchAll($sql, array(':year' => 2009));

$sql = "SELECT * FROM employee ORDER BY employed_at DESC LIMIT 1";
$employee = $con->fetchRow($sql);

$sql = "SELECT id FROM employee";
$employee_ids = $con->fetchColumn($sql);

$sql = "SELECT employed_at FROM employee WHERE employee_id = ?";
$employed_at = $con->fetchOne($sql, array(5));

$con->insert($employeeTable, array('name' => 'Katsuhiro Ogawa', 'employed_at' => '2006-12-18'));
$id = $con->lastInsertId($employeeTable->getTableName());

$con->update($employeeTable, array('title' => 'architect'), $id);

$stmt = $con->execute('TRUNCATE employee');

// More...
// @see Dotrine_Connection.php

Doctrineで生のSQLを吐きたいときは、Doctrine_Connectionからやることになります。$con->getDbh()でPDOオブジェクトとってくることもできますが、Doctrine_Connectionのメソッドだけで十分かと思います。

Doctrine_RawSqlクラスもありますが、過度な期待はしないほうがいいですよ。

ちなみにDoctrine_Queryの実行結果を配列で取得したい場合などは

<?php
class EmployeeTable extends Doctrine_Table
{
  public function getArchitectsAsArray()
  {
    return $this->createQuery()
      ->where('title = ?', 'architect')
      ->fetchArray(); // alias for ->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
  }

  public function getEmployeeAsArrayById($id)
  {
    return $this->createQuery()
      ->where('employee_id = ?', $id)
      ->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
  }
}

他には取得結果のオブジェクトに->toArray()をかますと配列に。