【问题标题】:Doctrine DBAL: Updating timestamp field with 'NOW()' valueDoctrine DBAL:使用 'NOW()' 值更新时间戳字段
【发布时间】:2012-06-30 19:29:44
【问题描述】:

使用 Doctrine DBAL,我有一些代码可以从绑定为 $telephone_international$surname 的表单值将新行插入到 main 数据库中。

完成后,它将一条新记录插入到重复的数据库中。 $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()' 是否被视为字符串。

【问题讨论】:

  • 作为简单的解决方法,您可以使用 php 的日期函数,如:'medium' => time(),插入时间戳
  • 或者对于 DateTime: new \DateTime('now')

标签: doctrine-orm silex dbal


【解决方案1】:

我偶然发现了同样的问题。由于 DBAL 本身没有太多也没有好的文档,我将发布我的解决方案。

最后一个参数指定了类型(按照数据和标识数组的顺序合并;就好像它们在同一个数组中一样):

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

【讨论】:

    【解决方案2】:

    正如我在上面的 cmets 中提出的,这似乎是可行的方法,如下所述:
    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
    ));
    

    【讨论】:

    • 感谢您的回答。然而,我(我应该说,我的共同开发者)决定使用date_default_timezone_set('GMT');'mediated' => date('Y-m-d H:i:s'); 来达到预期的效果。我将检查这是否在其他应用程序中有效,此时我会将其标记为已接受。
    • 现在我回到了 Symfony2 和 Doctrine 开发,我想我会重新审视这个问题。解决方案是使用$now = new \DateTime('NOW', new \DateTimeZone('UTC')); 然后'mediated' => $now->format('Y-m-d H:i:s'); 来获取当前的UTC 时间。我会接受这个答案,因为它为我指明了正确的方向,但你的答案中的代码将失败,因为 DateTime("now") 应该是一个字符串,而不是一个对象(除非我选择将它存储为一个对象)
    • @AdamElsodaney 是的,我原以为 dbal 层会在这里接受 DateTime 对象,但我确实必须按照你所说的将我的 DateTime 格式化为 (new \DateTime())->format('Y-m-d H:i:s')
    猜你喜欢
    • 2015-07-17
    • 2021-06-05
    • 2015-04-09
    • 1970-01-01
    • 2014-02-05
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多