У меня есть функциональный запрос в MySql:
select t.won,e.etot, s.username,s.country,r.points,r.rank FROM sf_guard_user s INNER JOIN marks r ON r.user_id = s.id inner join (select t.user_id,count(t.user_id)as won from topper t group by t.user_id) t on t.user_id=s.id inner join (select e.user_id,count(e.user_id)as etot from exams e group by e.user_id) e on e.user_id=s.id ORDER BY r.rank asc
Я написал код доктрины в классе sfGuardUserTable:
$q= $this->createQuery('u'); $wq =$q->createSubquery() ->select('t.user_id,count(t.user_id) won') ->from('Topper t') ->groupBy('t.user_id'); $dq = $q->createSubquery() ->select('e.user_id,count(e.user_id) etot') ->from('Exams d') ->groupBy('d.user_id'); $q->select(' t1.won, e1.dtot, u.username,u.country,r.points,r.rank') ->innerJoin ('u.Marks r ON r.user_id = u.id') ->innerJoin ('u.('.$wq->getDql().') t1 on t1.user_id=u.id') ->innerJoin ('u.'.$dq->getDql().' e1 on e1.user_id=u.id') ->orderBy('r.rank asc'); //echo $q->getSql(); return $q;
он дает ошибку Не удалось найти класс SELECT 🙁 пожалуйста, помогите мне. Спасибо в Advance.
Я попытался выполнить свой пользовательский запрос напрямую с помощью параметра запроса Doctrine Row Sql и его работы 🙂 Мне понравилось делиться им здесь:
$q = new Doctrine_RawSql(); $q->select('{t.won}, {e.etot}, {s.username},{s.country},{r.marks},{r.ranks}'); $q->from('sf_Guard_User s INNER JOIN marks r ON r.user_id = s.id inner join (select t.id,t.user_id,count(t.user_id)as won from topper t group by t.user_id) t on t.user_id=s.id inner join (select d.id,d.user_id,count(e.user_id)as etot from exams e group by e.user_id) e on e.user_id=s.id ORDER BY r.rank asc'); $q->addComponent('s', 'sfGuardUser s'); $q->addComponent('r', 's.Marks r'); $q->addComponent('t', 's.Topper t'); $q->addComponent('e', 's.Exams e'); return $q;
для большей помощи прочитайте его .