2012-06-29 30 views
0

使用Doctrine DBAL,我有一些代碼從$telephone_international$surname綁定的表單值插入到main數據庫中。Doctrine DBAL:使用'NOW()'值更新時間戳字段

完成此操作後,它會將新記錄插入到重複數據庫中。 $app['dbs']['backup']

如果這樣做成功,則先前插入main數據庫的條目將更新其值copied值。 copied列是時間戳,默認值爲0,但以下代碼應將其更改爲當前時間。

$app['dbs']['main']->update('phonebook', array(
    'mediated' => 'NOW()' 
), array(
    'telephone' => $telephone_international, 
    'surname' => $surname 
)); 

但值仍然是0000-00-00 00:00:00。我想知道'NOW()'是否被視爲字符串。

+0

簡單的解決方法,你可以使用PHP的日期函數如''mediated'=> time(),插入時間戳 – ivoba

+1

或DateTime:new \ DateTime('now') – ivoba

回答

1

正如我在上面的意見建議,這似乎是要走的路,因爲在這裏說:
http://doctrine-orm.readthedocs.org/en/2.0.x/cookbook/working-with-datetime.html

因此,嘗試這樣的:

$app['dbs']['main']->update('phonebook', array(
    'mediated' => new \DateTime("now") 
), array(
    'telephone' => $telephone_international, 
    'surname' => $surname 
)); 
+0

感謝您的回答。然而,我(我應該說,我的合作開發者)決定使用'date_default_timezone_set('GMT');''和''mediated'=> date('Ymd H:i:s');'來實現所需的結果。我會檢查一下這個功能是否適用於其他應用程序,此時我會將其標記爲已接受。 –

+1

現在我已經回到了Symfony2和Doctrine開發,我想我會重新回顧這個問題。解決方法是使用'$ now = new \ DateTime('NOW',new \ DateTimeZone('UTC'));' 然後''mediated'=> $ now-> format('Ymd H:i:s ');'獲取當前的UTC時間。我會理解這個答案,因爲它指向了正確的方向,但是你的答案中的代碼將失敗,因爲'DateTime(「now」)'應該是一個字符串,而不是一個對象(除非我選擇將它作爲一個對象存儲) –

+0

@AdamElsodaney是的我會以爲dbal層會在這裏接受'DateTime'對象,但我確實必須將我的'DateTime'格式化爲'(new \ DateTime()) - > format('Ymd H:i:就像你說的那樣。 – jcroll

0

我絆了同樣的問題。由於DBAL本身沒有太多且沒有好的文檔,我將發佈我的解決方案。

有指定的類型最後一個參數(在數據和identifcation陣列合併秩序;就好像它們是在同一陣列中):

$app['dbs']['main']->update('phonebook', array(
    'mediated' => new DateTime() 
), array(
    'telephone' => $telephone_international, 
    'surname' => $surname 
), array(
    'datetime', 
    PDO::PARAM_STR, 
    PDO::PARAM_STR 
));