首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
hyperf2.x里怎么给db连接设置时区
### 问题描述 hyperf2.x里怎么给db连接设置时区呢。。 我看没有这个配置项,也没有ConnectionEvent可以去监听 在DbQueryExecutedListener里执行 $event->connection->statement("SET time_zone='{$timeZone}'"); 也不起作用。。
发布于6年前 · 19 次浏览 · 来自
提问
Dleno
### 问题描述 hyperf2.x里怎么给db连接设置时区呢。。 我看没有这个配置项,也没有ConnectionEvent可以去监听 在DbQueryExecutedListener里执行 $event->connection->statement("SET time_zone='{$timeZone}'"); 也不起作用。。
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-09-04
Dleno
$event->connection->statement(“SET time_zone=’{$timeZone}’”); 这个也不是不起作用,是DbQueryExecutedListener监听器是在执行了要执行的语句之后执行的,所以对之前的语句不起作用。
赞
0
回复
2020-09-04
李铭昕
这个 Listener 是已经执行完的时候触发的。。 我一会改一下文档。。
赞
0
回复
2020-09-04
Dleno
回复
李铭昕
怎么给db连接设置时区呢,用什么方式可以实现啊
赞
0
回复
2020-09-04
李铭昕

赞
0
回复
2020-09-04
Dleno
回复
李铭昕
有没有方式可以动态的设置这个呢。 服务启动后,有两个请求,带上时区参数,两个请求是不同的两个时区
赞
0
回复
2020-09-04
Dleno
已解决。 一开始从事件,监听器还有DI映射关系出发弄,都没办法。。 结果从最简单的重写model类的方法就可以了。。 /** * 动态设置时区 */ public function getConnection(): ConnectionInterface { $connectionName = $this->getConnectionName(); $resolver = $this->getContainer()->get(ConnectionResolverInterface::class); $connection = $resolver->connection($connectionName); //设置时区 $timeZone = Context::get('timezone'); if (empty($connection->timeZone) || $connection->timeZone != $timeZone) { $connection->timeZone = $timeZone; //var_dump('connection set timeZone : ' . $timeZone); $connection->statement("SET time_zone='{$timeZone}';"); } return $connection; }
赞
0
回复