【问题标题】:Yii2: How to filter by 'date' and by 'time' from a 'datetime' db columnYii2:如何从“日期时间”数据库列中按“日期”和“时间”进行过滤
【发布时间】:2018-10-19 17:28:06
【问题描述】:

在用户表中,我有一个 created_at 列。在成为属性的用户 AR 模型中,在 \yii\grid\GridView 中,我将该属性拆分为 'columns' => ['created_at:date', 'created_at:time'],

问题:我如何为这些给定的列设置搜索字段,我的意思是它们不是实际的 db 列,因此不是模型属性。所以我做不到

$query->andFilterWhere([
            'crated_at_date' => $this->crated_at_date,
            'created_at_time' => $this->created_at_time,
        ]);

我知道搜索字段与 \yii\grid\Column::filterOptions 相关,但更具体地说,我不知道如何在搜索模型中指定 andFilterWhere() 子句。

【问题讨论】:

  • 您的日期和时间格式是什么?
  • @InsaneSkull 默认值。我不确定这有什么关系。
  • 显示created_at列值。

标签: mysql sql gridview filter yii2


【解决方案1】:

searchModel()你可以这样试试:

$query->andFilterWhere([
    'like', 
    'FROM_UNIXTIME(created_at, "%Y-%m-%d")', 
    $this->crated_at_date
])
->andFilterWhere([
    'like', 
    'FROM_UNIXTIME(created_at, "%h:%i:%s %p")', 
    $this->created_at_time
])

嗯,它没有经过测试,但我想它会成功的。

FROM_UNIXTIME()

【讨论】:

  • 谢谢,我已经想通了,我正在使用->andFilterWhere(['like', 'TIME(created_at)', $this->createdAtTime]); 。不过还有一个问题。虽然它有效。我在Yii::$app->timezone 中设置了一个时区,并且用户输入应该在本地时区中,另一方面,db 列是 UTC。我正在尝试这个->andFilterWhere(['like', "DATE(CONVERT_TZ('created_at', 'UTC', 'America/Tijuana'))", $this->createdAtDate]) 由于某种原因无法正常工作,但我是否走在正确的道路上? @InsaneSkull
  • @user1236524。您想将America/Tijuana 转换为UTC 对吗?你的created_at是什么?
  • 用户输入被视为美国/蒂华纳,数据库采用 UTC。 where 子句应该从 America/Tijuana 与 America/Tijuana 进行比较(也就是说,通过 convert_tz 将 UTC 隐蔽到 America/Tijuana)。 @insaneskull
  • 2016-06-03 02:30:16 不是unix,它只是应用程序中各处的UTC时间戳,只是向用户呈现/格式化为America/Tijuana。这就是为什么用户输入应该是 America/Tijuana。 @insaneskull。
  • @user1236524。你可以这样试试:DATE(CONVERT_TZ('created_at', '-07:00', 'America/Tijuana'))
【解决方案2】:

您可以通过将输入数据时间转换为时间来或多或少地进行过滤:

$query->andFilterWhere([
    '>=', 
    'crated_at_date_time', 
    strtotime($this->crated_at_date)
])

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2013-10-20
    • 2020-10-25
    • 2023-03-23
    相关资源
    最近更新 更多