升级数据库

文档

变更点

升级指南

  1. 将数据库凭据添加到 app/Config/Database.php。选项与 CI3 基本相同,只是一些名称略有变化。

  2. 在使用数据库的任何地方,都必须用 $db = db_connect(); 替换 $this->load->database();

  3. 如果使用多个数据库,请使用以下代码加载其他数据库 $db = db_connect('group_name');

  4. 现在必须更改所有数据库查询。这里最重要的变化是用 $db 替换 $this->db,并调整方法名和 $db。这里有一些例子:

    • $this->db->query('YOUR QUERY HERE'); 改为 $db->query('YOUR QUERY HERE');

    • $this->db->simple_query('YOUR QUERY') 改为 $db->simpleQuery('YOUR QUERY')

    • $this->db->escape("something") 改为 $db->escape("something");

    • $this->db->affected_rows(); 改为 $db->affectedRows();

    • $query->result(); 改为 $query->getResult();

    • $query->result_array(); 改为 $query->getResultArray();

    • echo $this->db->count_all('my_table'); 改为 echo $db->table('my_table')->countAll();

  5. 要使用新的查询构建器类,必须在 $builder = $db->table('mytable'); 之后初始化构建器,之后可以在 $builder 上运行查询。这里有一些例子:

    • $this->db->get() 改为 $builder->get();

    • $this->db->get_where('mytable', array('id' => $id), $limit, $offset); 改为 $builder->getWhere(['id' => $id], $limit, $offset);

    • $this->db->select('title, content, date'); 改为 $builder->select('title, content, date');

    • $this->db->select_max('age'); 改为 $builder->selectMax('age');

    • $this->db->join('comments', 'comments.id = blogs.id'); 改为 $builder->join('comments', 'comments.id = blogs.id');

    • $this->db->having('user_id',  45); 改为 $builder->having('user_id',  45);

  6. CI4 不提供 CI3 中已知的`数据库缓存 <https://www.codeigniter.com/userguide3/database/caching.html>`_ 层,所以如果需要缓存结果,请改用 缓存驱动

  7. 如果你在 Query Builder 中使用 limit(0),由于一个 bug,CI4 会返回所有记录而不是没有记录。但从 v4.5.0 开始,你可以通过一个设置来改变这种不正确的行为。所以请更改该设置。详细信息参见 limit(0) 行为

代码示例

CodeIgniter 3.x 版本

<?php

$query = $this->db->select('title')
             ->where('id', $id)
             ->limit(10, 20)
             ->get('mytable');

CodeIgniter 4.x 版本

<?php

$builder = $db->table('mytable');

$query = $builder->select('title')
    ->where('id', $id)
    ->limit(10, 20)
    ->get();