自定义筛选器不起作用

时间:2017-10-02 10:06:45

标签: php filter yii2 case

我的脚本中的CASE部分有问题(第三个$查询)。我正在创建过滤器,用于过滤轮班之间的间隔。我不知道这个问题。我做错了什么?

        } elseif ($this->shift == DeliveryItem::SECOND_SHIFT) { //druga zmiana
        $query->andFilterWhere(['>=', "(cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int))" , DeliveryItem::SECOND_SHIFT_START_HOUR]);
        $query->andFilterWhere(['<', "(cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int))" , DeliveryItem::SECOND_SHIFT_END_HOUR]);

        $query->andFilterWhere(['<=', "
                            (
                                CASE
                                    cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int)
                                WHEN
                                    ".DeliveryItem::SECOND_SHIFT_END_HOUR."
                                THEN (cast(to_char(".Production::tableName().'."created_at"'.", 'MI') as int))
                                ELSE -1
                            )
                            "
                                , DeliveryItem::SECOND_SHIFT_END_MINUTE]);

我也尝试过另一种方式:

            $query->andWhere("
                            CASE
                                cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int)
                            WHEN
                                ".DeliveryItem::SECOND_SHIFT_END_HOUR."
                            THEN
                            ((cast(to_char(".Production::tableName().'."created_at"'.", 'MI') as int)) <= ".DeliveryItem::SECOND_SHIFT_END_MINUTE. ")");

它的工作方式如下:如果rows_at属于某个时间间隔,而DeliveryItem::SECOND_SHIFT_END_HOUR == rows created_at hour,则将DeliveryItem::SECOND_SHIFT_END_MINUTE与rows_created_at分钟进行比较,并对其进行过滤。

此致

0 个答案:

没有答案