SQLをプロぺルに変換
select extract( epoch FROM ( SUM(COALESCE((apply_end_time - apply_start_time),'00:00'::interval) - COALESCE(rest_time::interval, '00:00'::interval) - COALESCE(over_rest_time::interval,'00:00' ::interval) )))* interval '1 second' FROM trn_work_time WHERE user_id=142 group by user_id;
これをプロペルで表現すると
/** * 総時間を取得 * * @param interval time1 退勤時間 * @param interval time2 出勤時間 * @param interval time3 規定外休憩時間 * @param interval sumtime 総時間(秒数) * @param interval sumtime_hour 総時間 (時間) * * @return interval 総時間を返す */ public static function fetchSumWorkTimeByUserId($userId, $ym) { $time1 = 'COALESCE((' . self::APPLY_END_TIME . ' - ' . self::APPLY_START_TIME . ")::interval, '00:00' ::interval)"; $time2 = 'COALESCE(' .self::REST_TIME . " ::interval, '00:00'::interval)"; $time3 = 'COALESCE(' .self::OVER_REST_TIME . " ::interval, '00:00' ::interval)"; $sumTime = 'SUM(' . $time1 . ' - ' . $time2 . ' - ' . $time3 . ')'; sumTime_hour = 'EXTRACT(EPOCH FROM' . '(' .$sumTime . ') ' . ')' . " * '1 second'::interval"; $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(self::USER_ID); $c->addAsColumn('SUM_WORK', $sumTime_hour); $c->add(self::USER_ID, $userId, Criteria::EQUAL); $c->addAnd(self::DATE, "DATE_TRUNC('month', " . self::DATE . ") = '" . $ym . "-01'", Criteria::CUSTOM); $c->addGroupByColumn(self::USER_ID); $rs = self::doSelectRS($c); $rs->setFetchMode(ResultSet::FETCHMODE_ASSOC); if ($rs->next()) { $result = $rs->get('sum_work'); } else { $result = '00:00:00'; } return $result; }