gpt4 book ai didi

php - 分页器对 afterFind 字段进行排序

转载 作者:行者123 更新时间:2023-11-29 23:51:10 25 4
gpt4 key购买 nike

我正在尝试显示我们客户的各个时区以及由此得出的本地时间的列表。现在,在我的客户端模型中,我有以下函数 (doAfterFind),它只是 afterFind 的包装,提供一致的格式。

public function doAfterFind($result = array()) {
$result = parent::doAfterFind($result);

if (!empty($result['timezone'])) {
App::uses('CakeTime', 'Utility');

$result['local_time'] = CakeTime::format(
VIEW_DATE_FORMAT,
strtotime('now'),
null,
$result['timezone']
);
}

return $result;
}

local_time 字段已正确放置在模型中的 find() 之后。我也尝试将其实现为虚拟字段,因为它需要进行排序。问题是我不知道如何根据当前时间和客户的时区来计算时间。我在模型的构造函数中尝试了相同的操作,并将其添加到 virtualFields 数组中,但时区在构造函数调用期间不可用 - 因为没有加载 ID 或任何内容。

有谁知道一种方法可以让 MySQL 计算这个,或者使用我已经拥有的但作为与 Paginator sort() 兼容的虚拟字段?我可以格式化 View 中的日期显示,但需要本地时间列可排序。

注释:我的时区存储为区域设置名称(America/New_York 等)。常量 VIEW_DATE_FORMAT 只是 date() 格式字符串 F jS, Y - g:i A

最佳答案

假设您对正在使用的服务器有 shell 访问权限,请参阅有关设置 mysql 服务器以便能够根据时区名称进行时区转换的信息:http://blog.mozilla.org/it/2012/11/16/converting-timezone-specific-times-in-mysql/

完成设置后,您应该能够创建虚拟字段:

$this->virtualFields['local_time'] = "CONVERT_TZ(NOW(), 'UTC', Client.timezone)";

(如果您的服务器未设置为 UTC,则必须将第二个参数替换为服务器的时区。)

结果可能不会按照您想要的方式格式化,但您可以在 afterFind 中进行格式化。

关于php - 分页器对 afterFind 字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com