Yii2 - 在GridView中创建并使用临时mysql表

时间:2018-02-22 12:50:43

标签: php mysql yii yii2 temp-tables

我需要在 Yii2的GridView 中创建和使用临时mysql表。

我的GridView显示了表license中的一些列,其中一列是在运行时计算的。我可以很容易地做到这一点(在模型中使用属性转换),但是,我也需要排序/过滤。我过去使用视图或临时表解决了这个问题。

我已将列值计算移植到 SQL (在临时表中使用它),但我不知道如何在Yii2中完成所有这些操作。我想使用临时表而不是视图的原因是列值计算取决于应用程序的运行时配置。

我没有在 Yii2 中找到有关如何执行此操作的任何文档或示例。那里有没有?也许有人在这里做了类似的事情并且可以发布一些示例代码?

由于

UPDATE:这是我正在尝试与GridView一起使用的临时表。我需要通过 status 字段进行过滤和排序。现在它是一个视图,但由于某些参数依赖于应用程序运行时配置,因此它必须是临时表。

CREATE OR REPLACE VIEW extended_license AS
SELECT
    license.*,
    (CASE
        -- license expired
        WHEN (license.valid_until_date < UTC_DATE())
            THEN 'License Expired'

        -- support valid until year_month(begin_date) + 1year <= year_month(today).
        WHEN (license.branding_name IN ('this_is_runtime_generated_list'))
            THEN CASE ( Year(license_begin_date) + 1 < Year(UTC_DATE())
                    OR (Year(license_begin_date) + 1 = Year(UTC_DATE()) AND Month(license_begin_date) <= Month(UTC_DATE)) )
                WHEN 1 THEN 'Support Expired'
                ELSE 'Valid'
            END

        -- support valid if major version is current year
        WHEN (license.branding_name IN ('this_is_runtime_generated_list'))
            THEN CASE (license.program_major_ver != YEAR(UTC_DATE()))
                WHEN 1 THEN 'Support Expired'
                ELSE 'Valid'
            END
        -- support valid
        ELSE 'Valid'
    END) AS status
FROM license;

0 个答案:

没有答案