【问题标题】:Using Cake\I18n\Time with MySQL time fields将 Cake\I18n\Time 与 MySQL 时间字段一起使用
【发布时间】:2016-05-07 08:44:18
【问题描述】:

我正在尝试从 MySQL 数据库返回时间格式字段的列表,并使用 Cake\I18n\Time 类来操作它们。目前,当从数据库中获取数据时,这些字段使用当前日期。我想为它们设置我自己的日期(因为数据可以是多个日期),但我似乎找不到一个优雅的解决方案。

到目前为止,我在测试期间的解决方案是使用Time::setTestNow($now) 设置日期,然后在我的实体中创建一个函数来正确设置日期,如下所示:

$newTime = new Time();
$newTime->hour($savedTime->format("H"))
->minute($savedTime->format("i"))
->second($savedTime->format("s"));

显然,这似乎是一种为这些字段设置日期的相当麻烦的方法。我的应用程序中有其他功能需要比较日期和时间(日期可以从另一个表中获取)所以Time::setTestNow() 似乎是正确设置正确日期以及设置日、月和年为每个新的时间似乎也是一个繁琐的解决方案。

我可以使用其他方法来设置从数据库中提取时间的日期吗?我宁愿在我的模型中拥有正确的时间,而不是每次我想使用它时都必须转换它)。

谢谢。

【问题讨论】:

  • 我不明白我们的问题?您将日期存储在数据库中,但它们不是您想要的,您想在回显它们时操纵它们?为什么不首先存储正确的日期? DB中日期的格式和字段类型是什么?
  • 嗨,我将时间作为时间字段存储在数据库中,日期作为日期字段存储在另一个表中。我需要能够在时间上设置正确的日期,以便与它们进行比较。
  • 这听起来像是一种有缺陷的设计方法。
  • 我正在尝试实现GTFS 样式系统,因此我需要将日期和时间分开。
  • 有趣。而我的回答并没有解决这个问题?

标签: php mysql date cakephp cakephp-3.0


【解决方案1】:

我可以使用其他方法来设置从数据库中提取时间的日期吗?

Entity Accessors. 请参阅virtual properties 以实现此权利。书中的例子:

class Article extends Entity
{
    protected function _getTitle($title)
    {
        return ucwords($title);
    }
}

只需在自定义 getter 中连接日期和时间即可。

我将时间作为时间字段存储在数据库中,日期作为日期字段存储在另一个表中。我需要能够在时间上设置正确的日期,以便与它们进行比较。

这听起来像是一个糟糕的设计。如果必须将它们分开,为什么不能在保存时将它们组合保存在第三个字段中?但是,您可以连接数据库查询本身 (Combining (concatenating) date and time into a datetime) 中的字段,并使用 CakePHP ORMs 类型映射将日期时间类型映射到它。也许你很幸运,它会自动将其检测为正确的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2017-07-07
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多