CodeIgniter教程 - CRUD

目录

CRUD - Create,Read,Update,Delete 在这篇教程中,我们学习CI对数据库的操作。

查询数据库

在前面的教程中,我们使用下面的语句来获取users表中的数据

1
$query = $this->db->get('users');

我们来换一种方式来查询数据库,

1
2
$query = $this->db->query('select * from users');
return $query->result();

结果是相同的,这样我们就可以利用我们的SQL知识来查询我们的数据。你可以使用CI的用户手册来查看数据库的功能,比如我们可以使用$query->num_rows()来返回获取的记录数,$query->num_fields()返回字段数等。

带有参数的查询

1
2
//获取姓名为 'Zhang Jinglin' 的用户
 $query = $this->db->where('name', 'Zhang Jinglin')->get('users');

然我们通过URL来获取参数。首先修改我们的模型,User_model.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 <?php
/**
 * Created by PhpStorm.
 * User: jingl
 * Date: 2016/2/11
 * Time: 13:46
 */

class User_model extends CI_Model
{
    public function get_users($id)
    {
        $query = $this->db->where('id', $id)->get('users');
        return $query->result();
    }
}

在模型的方法中,我们需要获取用户的ID,依据ID来读取用户数据。修改控制器,User.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
/**
 * Created by PhpStorm.
 * User: jingl
 * Date: 2016/2/11
 * Time: 13:50
 */

class User extends CI_Controller
{
    public function index($id = 0)
    {
        $this->load->model('user_model');
        $data['results'] = $this->user_model->get_users($id);
        $this->load->view('user_index', $data);
    }
}

方法中的参数是赋值为默认值,如果没提供参数,默认值为0。现在我们访问http://localhost/ci/index.php/user/index/1就能获取id为1的用户,你可以修改不同的id查看一下。

根据上面的结果,实际上CI的URL模式是index.php/{控制器}/{方法}/{id}。

实际上,我们可以在where方法中传入一个数组,作为参数

1
2
3
4
$this->db->where([
    'id' => $id,
    'name' => $name
])

上面的参数相当于where id = $id and name = $name。 当然你可以查看用户手册来学习更多的知识。

如果你更愿意使用原始的SQL语句来进行查询,(事实上我是非常喜欢用SQL语句来查询的),这里面我们来看一如何使用查询绑定来简化我们的查询工作。

比如下面的例子:

1
2
$sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";
$this->db->query($sql, array(array(3, 6), 'live', 'Rick'));

插入数据

插入数据也是非常简单的,我们在User_model.php中增加方法

1
2
3
4
public function create_user($data)
{
    $this->db->insert('users', $data);
}

模型方法中的参数接受一个数组,这个数组包含对应的字段的值。在User.php控制器中条件方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public function create()
 {
     $this->load->model('user_model');
     
     $name = 'Zhang San';
     $password = '123';
     $this->user_model->create_user([
         'name' => $name,
         'password' => $password
     ]);
     echo 'Insert OK';
 }

这个方法将需要构建的记录的字段复制到数组中,交给模型方法执行即可。在浏览器中访问http://localhost/ci/index.php/user/create,如果看见了正常的输出,就可以查看数据库了。

上面的控制器方法中有一个问题,就是在不同的方法中我们都需要装载模型

1
$this->load->model('user_model');

当然可以利用自动装载来完成(在上一篇教程中),但是我是不大喜欢在自动装载中装入模型类的,因为这样就对系统的全部类可见了,那么怎么解决呢?解决的方法是利用构造函数即可。在控制器User.php中添加构造方法。

1
2
3
4
5
public function __construct()
{
    parent::__construct();
    $this->load->model('user_model');
}

上面的构造方法中,千万不要忘记了调用父类的构造方法。

通过在构造方法中装载模型类,我们就可以在index create方法中取消装载模型的语句了。

修改数据

一般修改记录会修改某一条记录,这可以用where方法来进行限定。修改我们的模型类,添加方法

1
2
3
4
public function update_user($id, $data)
{
    $this->db->where('id', $id)->update('users', $data);
}

我们的模型方法接受两个从参数,一个是要修改的记录ID,一个是要修改的数据。在控制器中增加修改方法:

1
2
3
4
5
6
public function update()
{
    $id = 3;
    $name = 'Modify Name';
    $this->user_model->update_user($id, [ 'name' => $name ]);
}

注意到了么,因为我们在构造函数中装载了模型类,所以在控制其方法中就不要显示的装载模型了。

删除数据

一般删除记录会删除某一条记录,这可以用where方法来进行限定。修改我们的模型类,添加方法

1
2
3
4
public function delete_user($id)
{
    $this->db->where('id', $id)->delete('users');
}

我们的模型方法接受要删除的记录ID。在控制器中增加修改方法:

1
2
3
4
5
public function delete()
{
    $id = 3;
    $this->user_model->delete_user($id);
}

这就是CI的CRUD,当然CRUD也有其他的方式,我们后面会学习。