2

我想知道是否有人可以帮忙。

我刚刚开始使用 CodeIgniter 进行迁移,但我在试图弄清楚如何将 SQL 转换为迁移时遇到了麻烦。

有没有人可以为我将此 SQL 转换为迁移,以便我可以看到它是如何完成的。

我的SQL如下:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `user_agent` varchar(150) COLLATE utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
4

2 回答 2

3

请在此处阅读文档:

CodeIgniter 迁移

本质上,您将希望使用 CodeIgniterdbforge类来创建表。使用上面的代码:

    $this->dbforge->add_field(array(
        'session_id' => array(
            'type' => 'VARCHAR',
            'constraint' => '40'
        ),
        'ip_address' => array(
            'type' => 'VARCHAR',
            'constraint' => '16'
        ),
        'user_agent' => array(
            'type' => 'VARCHAR',
            'constraint' => '150'
        ),
        'last_activity' => array(
            'type' => 'INT',
            'constraint' => '10'
        ),
        'user_data' => array(
            'type' => 'TEXT'
        )
    ));

    $this->dbforge->add_key('session_id', TRUE);
    $this->dbforge->create_table('ci_sessions');

dbforge可以在此处找到有关课程的文档:

ellislab.com/codeigniter/user-guide/database/forge.html

注意:不过,我不建议弄乱 CI Sessions 表。

于 2012-09-26T16:47:16.063 回答
3

如果您有一个大型 SQL 查询块,您知道它是“安全的”并且您想节省时间,您也可以简单地执行此操作(在我看来,这是基于表的复杂性和出错机会的判断调用将原始 SQL 转换为数组时 - 毕竟在迁移中,所有内容都是硬编码的,您不必担心 SQL 注入等的机会。)

    $sql = "CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
)";
    $this->db->query($sql);

但是我认为我不建议将会话表作为迁移加载,因为如果$config['sess_use_database']config/config.phpis 中true,当您转到迁移 URL 时它会失败,因为 Codeigniter 将首先尝试在数据库中为您创建一个会话条目浏览器和数据库表还不存在..

A Database Error Occurred
Error Number: 1146
Table 'characterhub.ci_sessions' doesn't exist

因此,要使其正常工作,您或执行迁移的任何人必须先设置sess_use_databasefalse,然后运行迁移,然后再将其更改回true

于 2012-12-19T22:25:51.287 回答