DQLでカッコつきwhereを書く

こういう感じの条件が書きたかったので色々試してみました。

WHERE (a = ? AND b = ?) AND (c = ? OR d = ?)
$q = Doctrine_Core::getTable('Hoge')->createQuery()
    ->where('(a = ?', 1)
    ->addWhere('b = ?)', 1)
    ->addWhere('(c = ?', 1)
    ->orWhere('d = ?)', 1);

echo $q;
// FROM Hoge WHERE (a = ? AND b = ?) AND (c = ? OR d = ?)

一応OKみたい。以下も結果は同じです。

$q = Doctrine_Core::getTable('Hoge')->createQuery()
    ->where('(a = ?', 1)->addWhere('b = ?)', 1)
    ->addWhere('(c = ?', 1)->orWhere('d = ?)', 1);

このくらいの記述がわかりやすいかな。

$q = Doctrine_Core::getTable('Hoge')->createQuery()
    ->where('(a = ? AND b = ?)', array(1, 1))
    ->addWhere('(c = ? OR d = ?)', array(1, 1));