これを行う最善の方法を知る必要があります...データベースにテーブルがあります。この投稿では、TCと呼びます。興味のあるフィールドはいくつかあります。
id, daydate, noteBy_id, and totaltime
noteBy_id は user テーブルに割り当てられていますが、ここにも探しているアイテムがいくつかあります...
id, first_name, last_name, user_name, department, parentcompany
id
部門は、フィールドにandしかない 3 番目のテーブルを参照してい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] => me@me.me
[emailCanonical] => me@me.me
[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] =>
)
)
)
実行されたクエリではデータベースに2つあるはずのアイテムが1つしかないため、これは間違っています..
次のようになります。
[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
)
ただし、ユーザー ID が TC テーブルに少なくとも 1 つの一致がある場合、結果の配列にはエントリのみが存在するはずです...このクエリを理解するための助けをいただければ幸いです..