【问题标题】:Extending the CI_DB_active_record class in codeigniter 2.0在 codeigniter 2.0 中扩展 CI_DB_active_record 类
【发布时间】:2011-02-22 21:08:49
【问题描述】:

我正在使用 Codeigniter 编写我的第一个程序,但遇到了问题。我将从对问题的重点描述开始,如果需要,我可以扩大范围:

我需要将一个多维数组写入数据库,并希望使用 CI_DB_active_record 类中的 insert_batch 函数来执行此操作。问题是我需要将某些字段的空值写为 NULL 而其他字段需要是空字符串。当前函数将所有值都用单引号括起来,我找不到将空值写入数据库的指定字段的方法。

我还想增加每批的记录数。

我知道如何扩展模型、库等,但是有没有办法在不修改核心类的情况下扩展 CI_DB_active_record 类?我发现使这项工作的核心类修改的最小量是修改 DB.php 文件中的以下行(将 require_once 文件更改为扩展 CI_DB_active_record 类的新文件并将 CI_DB_active_record 类名更改为新类名称):

require_once(BASEPATH.'database/DB_active_rec'.EXT);

        if ( ! class_exists('CI_DB'))
        {
            eval('class CI_DB extends CI_DB_active_record { }');
        }

我可以做得更好吗?

【问题讨论】:

    标签: codeigniter activerecord


    【解决方案1】:

    没有现成的解决方案可以做到这一点。你的 hack 是一个合理的解决方案,如果它成功了,那就当机立断。

    如果您要对核心进行任何更改(AR 的某些部分还有很大的改进空间),那么为什么不跳上 BitBucket 并帮助使用 Reactor?

    https://bitbucket.org/ellislab/codeigniter-reactor

    【讨论】:

    • 不同意回答您的问题:但是有没有办法在不修改核心类的情况下扩展 CI_DB_active_record 类?是的,有一种方法可以扩展核心类。 codeigniter.com/user_guide/general/core_classes.html
    • 当然你可以扩展核心库,但是数据库类不是一个普通的库,不被视为一个,因此Loader库不知道你的MY_DB_active_record。看看你刚刚发布的链接,你看到那里有 Database 类的引用吗?
    • bonez - 我最初确实尝试过您的解决方案,但正如 Phil 所说,活动记录类不像其他核心类那样可扩展。
    • 感谢您输入 Phil,感谢您为 CI 所做的一切。
    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多