【问题标题】:Alter a MySQLi object?更改 MySQLi 对象?
【发布时间】:2013-10-04 22:27:16
【问题描述】:

我目前正在使用 MVC 模式,同时爱上了 PHP 中的 DateTime 类;我在模型中创建了一个DateTime 对象,并在视图中使用$date->format('Y-m-d') 形成日期。

我的问题是,是否有任何方法可以在选择后更改 MySQLi 对象并将 MySQL 时间戳列更改为 DateTime 对象?

我当前的解决方案是遍历MySQLi 对象并将每一行推送到一个数组中。不过感觉不是很圆滑。

有什么想法吗?

【问题讨论】:

  • 没有什么说你不能扩展 mysqli 和/或 mysqli_stmt 对象来提供你自己的实现来理解 DateTimes。
  • 扩展的外观如何?执行常规查询,遍历结果并创建新对象?
  • class mysql_with_datetime extends mysqli { // your custom implementation } 我必须认真考虑如何做这样的事情,因为您可能需要覆盖 mysqlimysqli_stmtmysqli_result 的重要部分,等以使这项工作按预期进行。我个人会质疑您将从这项工作中获得什么价值,因为很容易根据需要简单地实例化 DateTime 对象以处理返回的数据。
  • 我的猜测是更好的方法是查看您的模型并找到一种方法将某些字段标记为日期时间,并让模型自动为任何标记为日期时间的字段实例化 DateTime 对象。跨度>
  • 好点。我的主要原因是保持 MVC 稳定,但也许我必须破例并在视图中创建 DateTime 对象,如果没有其他简单的方法可以做到这一点。

标签: php datetime mysqli timestamp


【解决方案1】:

如果您的推理只是格式化日期,我认为您可以这样做:

SELECT FROM_UNIXTIME(table.column, '%Y-%m-%d') FROM table

我是从This Post 查到的。

尚未对其进行测试,但是,它应该比为日期格式之类的小东西扩展 MySQLi 类更好。

【讨论】:

  • 正如我提到的,我更喜欢维护 MVC 结构,因此在模型中格式化日期是不可能的。 :-)
  • 这是哪条规则? (0.o)或者,我认为模型操纵数据(CRUD)?嗯,这不是你要找的。这是我唯一能想到的将日期转换应用于整个数据集的方法,而无需循环遍历结果或求助于 walk 函数。
  • Unix 时间可能是在一个系统和另一个系统之间传输日期/时间数据的唯一真正通用的方式。为什么编辑模型实体来处理这些转换不是 MVC 的一部分?这就是模型的用途。处理数据,并与数据存储对话。
  • 嗯,这真的是一个偏好问题。我会说用户查看的日期格式属于视图。在其他地方讨论过here
  • 是的。将视图的格式保存为帮助程序确实有意义,尽管它可以更好地利用服务器资源来根据需要提取格式化的数据。因为,如果您要在 URI 中存储区域设置,则视图接近命令链中的最后一个(路由器 -> 控制器 -> 模型 -> 视图 -> 用户 -> 重复)。那么模型以它知道它需要的格式请求数据不是更有效吗?如果我的理解不正确,请纠正我...
猜你喜欢
  • 2014-07-02
  • 1970-01-01
  • 2018-02-07
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多