2013-09-12 1 views
0

У меня есть 2 таблицы: «Пользователь» и «Состояния». Что я претендую сделать, чтобы подсчитать, сколько пользователей из определенного состояния, то есть:Как подсчитать элементы после объединения влево с доктриной

состояние всего пользователи Santa Fe 5 Буэнос-Айрес 20

и так далее.

Я использую CodeIgniter с доктриной, вот мой код:

public function countByState(){ 
    $this->qb = $this->em->createQueryBuilder(); 

    $this->qb->select('s.state_id', $this->qb->expr()->count('u.state')) 
      ->from('models\States', 's') 
      ->leftJoin('s.state_id' , 'u') 
      ->leftJoin('models\User', 'u') 
      ->groupBy('s.state_id'); 

    $query = $this->qb->getQuery(); 
    $obj = $query->getResult(); 

    return $obj;   
} 

и это ошибка: Фатальная ошибка: Uncaught исключение 'Доктрина \ ORM \ Query \ QueryException' с сообщением «[семантические ошибки ] line 0, col 76 около 'u LEFT JOIN models \ User': Ошибка: Модели классов \ States не имеют ассоциации с именем state_id 'в C: \ Desarrollo \ new_frame_doctrine \ site \ application \ libraries \ data \ Doctrine \ ORM \ Query \ QueryException.php в строке 47

+0

@AmitKumar thanx amit, я знаю, как это сделать в sql, но не в dql, так что это был вопрос – Limon

ответ

0

Используйте этот sql-запрос

SELECT s.name,count(*) FROM `users` u left join `state` s on u.stateid=s.id 
group by s.id; 

В коде пожалуйста измените соответственно !!

Я попробовал это, создав две таблицы с именем state (с полями id and name) и пользователями (с полями id, name and state_id), он отлично работал для меня.

Cheers !!!