Мне нужно знать, как лучше всего это сделать... У меня есть таблица в моей базе данных, для этого поста мы назовем ее TC, в ней есть только несколько полей, которые меня интересуют:
id, daydate, noteBy_id, and totaltime
noteBy_id назначается пользовательской таблице, в которой снова есть только несколько элементов, которые я ищу...
id, first_name, last_name, user_name, department, parentcompany
отдел ссылается на еще одну третью таблицу, в полях которой есть только id
и departmentName
...
Используя построитель запросов, я создал это до сих пор:
$query = $qb->select('t', 'u')
->leftJoin('t.noteBy', 'u', 'WITH', 'u.id = 't.noteBy')
->where('t.daydate BETWEEN :start AND :end')
->andWhere('u.parentcompany = :pid')
->andWhere('u.department = :dep)
->groupBy('u.id')
->setParameter('start', $start)
->setParameter('end', $end)
->setParameter('dep', $department)
->getQuery();
Теперь этот запрос работает как есть, но возвращает это:
Array
(
[0] => Array
(
[id] => 6
[in1] => DateTime Object
(
[date] => 2012-04-17 09:10:00
[timezone_type] => 3
[timezone] => America/Denver
)
[out1] =>
[in2] =>
[out2] =>
[in3] =>
[out3] =>
[totaltime] => 0.00
[daydate] => DateTime Object
(
[date] => 2012-04-17 09:10:00
[timezone_type] => 3
[timezone] => America/Denver
)
[noteBy] => Array
(
[username] => j
[usernameCanonical] => j
[email] => [email protected]
[emailCanonical] => [email protected]
[enabled] => 1
[salt] =>
[password] =>
[credentialsExpired] =>
[credentialsExpireAt] =>
[id] => 124
[full_name] =>
[first_name] => J
[last_name] => B
[socialsecurity] =>
[phone] =>
[phone2] =>
[address1] =>
[address2] =>
[city] =>
[state] =>
[zip] =>
[startdate] =>
[notes] =>
)
)
)
Что неверно, потому что у него есть только 1 элемент, тогда как в запущенном запросе он должен иметь 2 в базе данных.
Как это должно выглядеть:
[0]
(
[id] => '1'
[first_name] => 'j'
[last_name] => 'b'
[username] => 'jb'
[department] => 'some department'
[total_time] => SUM of all records in TC.total_time for user id 1
)
[1]
(
[id] => '2'
[first_name] => 'frank'
[last_name] => 'blew'
[username] => 'fb'
[department] => 'some department'
[total_time] => SUM of all records in TC.total_time for user id 2
)
Но в результирующем массиве должны быть только записи, если идентификатор пользователя имеет хотя бы 1 совпадение в таблице TC... Приветствуется любая помощь в выяснении этого запроса.
$qb = $this->createQueryBuilder('t');
, вы можете попробовать использовать$$qb = $this->_em->createQueryBuilder();
, так как теперь у вас есть чистый queryBuilder, где createQueryBuilder регистрирует выбор для вас, что затрудняет использование собственного выбора. - person Sgoettschkes   schedule 25.04.2012