Этот сайт очень поможет в обучении написанию критериев - вы можете использовать его для генерации кода критериев из псевдо-SQL. Я также рекомендовал бы захватить шпаргалки Symfony / Propel .
В частности, для вашего запроса вам понадобится что-то вроде этого:
$c = new Criteria();
$c->addJoin(discusreply::DISREPID, discusreply::PARENTID, Criteria::INNER_JOIN);
$c->clearSelectColumns();
$c->addSelectColumn(discusreplyPeer::Disrepid);
...
$c->add(discusreplyPeer::DISTOPID, $this->id, Criteria::EQUAL);
...
$c->addAscendingOrderByColumn(discusreply::DISREPID);
Я не уверен, что система Criteria поддерживает несколько предложений для внутреннего объединения, поэтому вам, возможно, придется вернуться к специальному SQL для этого запроса (если это произойдет, я хотел бы знать, как). Следующий код создаст объект ResultSet, аналогичный тому, который вы получили бы из простых слоев абстракции базы данных.
$sql = "SELECT ...";
$dbh = Propel::getConnection([DB]);
$sth = $dbh->createStatement();
$res = $sth->executeQuery($sql, ResultSet::FETCHMODE_NUM);
Я не думаю, что есть большой недостаток в использовании специального метода в таком запросе, так как вам придется иметь дело с объектами ResultSet, а не с объектами таблицы, когда вы возвращаете только определенные столбцы.