2016-07-26 36 views
0

您好可以任何人請幫助這個,我想添加1小時的時間保存在數據庫中,但無法找到任何方式作爲教條date_add僅支持月份和日期如何添加1小時與當前在數據庫中保存在數據庫中的日期

感謝 法希姆

public function deleteSession($sessionId = null, $sessionName = null) 
{ 
    $flag = false; 
    $dql = $this->getEntityManager() 
     ->createQueryBuilder() 
     ->update('EcomBundle:Sessions', 's') 
     ->set('s.status', ':status') 
     ->setParameter('status', 'deleted') 
     ->where('1 = 1'); 

    if ($sessionId !== null) { 
     $dql = $dql->andWhere('s.phpSessId = :phpSessId') 
      ->setParameter('phpSessId', $sessionId); 
     $flag = true; 
    } 

    if ($sessionName !== null) { 
     $dql = $dql->andWhere(' s.sessionName = :sessionName') 
      ->setParameter('sessionName', $sessionName); 
     $flag = true; 
    } 

    if ($flag === false) { 
     $dql = $dql->andWhere("DATE_ADD(s.updatedAt, 1, 'HOUR') < :curTime") 
     ->setParameter('curTime', new \DateTime('now')); 
    } 

    $dql = $dql->getQuery(); 
    $result = $dql->execute(); 
    return $result; 
} 

回答

0

你可以註冊你的mysql的需求定製DQL功能。請參閱http://www.doctrine-project.org/2010/03/29/doctrine2-custom-dql-udfs.html中的「添加日期」段落。一旦你創建了你的課程,你必須在你的config.yml文件中註冊它,在doctrine.orm.entity_managers.default.dql.datetime_functions下。就像這樣:

# Doctrine Configuration 
doctrine: 
    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     default_entity_manager: default 
     entity_managers: 
      default: 
       dql: 
        datetime_functions: 
         date_add:  AppBundle\DQL\MysqlDateAdd #path to your custom date_ad mysql function 
+0

看起來很有希望,我會盡力在這裏更新一次e感謝您的幫助 – Fahim

0

你可以試試這招,無需註冊自定義DQL功能:

$oneHour = 1/24; 
$dql = $dql->andWhere("DATE_ADD(s.updatedAt, :oneHour, 'DAY') < :curTime") 
    ->setParameters(['curTime' => new \DateTime('now'), 'oneHour' => $oneHour]); 
+0

嗨dlondero,謝謝你的回答,但它會引發錯誤:QueryException in QueryException.php line 52:[Syntax Error] line 0,col 91:Error:Expected Doctrine \ ORM \ Query \ Lexer :: T_COMMA, '/' – Fahim

+0

Fahim更新了答案。以前只是建議你可以分成24個部分(如小時),並使用一個。 – dlondero

+0

嗨dlondero,感謝您的幫助,但恐怕它不起作用。 updatedAt的值是2016-07-28 18:20:00,我在2016-07-28 18:55:00運行DQL,因此它不應該更新狀態,但不幸的是它的確如此。 – Fahim

0

爲什麼不只是改變

if ($flag === false) { 
     $dql = $dql->andWhere("DATE_ADD(s.updatedAt, 1, 'HOUR') < :curTime") 
     ->setParameter('curTime', new \DateTime('now')); 
    } 

if ($flag === false) { 
     $dql = $dql->andWhere("s.updatedAt < :targetTime") 
     ->setParameter('targetTime', (new \DateTime('now'))->modify("-1 hour")); 
     } 
+0

謝謝你ilyass。這是一個簡單的解決方案。我的想法只是圓整的date_add,在這種情況下仍然無用。謝謝 – Fahim

+0

不客氣:) – ilyass