升级数据库
文档
变更点
CI4 的功能基本与 CI3 相同。
CI3 中已知的`数据库缓存 <https://www.codeigniter.com/userguide3/database/caching.html>`_ 功能已被删除。
方法名已更改为 camelCase 样式,并且在运行查询之前,现在需要初始化 查询构建器。
升级指南
将数据库凭据添加到 app/Config/Database.php。选项与 CI3 基本相同,只是一些名称略有变化。
在使用数据库的任何地方,都必须用
$db = db_connect();
替换$this->load->database();
。如果使用多个数据库,请使用以下代码加载其他数据库
$db = db_connect('group_name');
。现在必须更改所有数据库查询。这里最重要的变化是用
$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();
要使用新的查询构建器类,必须在
$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);
CI4 不提供 CI3 中已知的`数据库缓存 <https://www.codeigniter.com/userguide3/database/caching.html>`_ 层,所以如果需要缓存结果,请改用 缓存驱动。
如果你在 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();