本节将为您讲解如何对数据表进行快速的CURD操作:

    C 即 Create 创建

    U 即 Update 更新

    R 即 Read 读取

    D 即 Delete 删除

    我们首先定义一个数据模型,这个模型会自动关联gf_blog数据表,数据表中字段为:id、title、content、ctime、utime,分别是自动编号、文章标题、文章内容、创建时间、更新时间。

    class BlogModel extends GF_Model {

    1. //创建一条新记录
    2. public function create($data) {
    3. //方法名称是开发人员自行定义的,比如可以是:addNew()
    4. return $this->add($data); //add方法成功后会返回新插入记录id,失败则返回boolean型false
    5. }
    6. //更新一条记录
    7. public function update($condition, $new_data) {
    8. //方法名称是开发人员自行定义的,比如可以是:updateData()
    9. return $this->save($condition, $new_data); //save方法成功后返回true,失败则返回false
    10. }
    11. //读取一条记录
    12. public function readOne($id) {
    13. $condition['id'] = $id;
    14. return $this->where($condition)->find(); //find方法成功后返回一条数据记录,失败则返回false
    15. }
    16. //读取全部记录列表
    17. public function readAll() {
    18. return $this->order('id desc')->select(); //select方法成功后返回记录列表,失败则返回false
    19. }
    20. //删除一条记录
    21. public function deleteOne($id) {
    22. $condition['id'] = $id;
    23. return $this->delete($condition); //delete方法成功后返回true,失败则返回false
    24. }

    }

    这样模型我们便设计好了,我们通过实例化模型即可对数据表进行CURD操作了,实际上如果只是这样简单的操作数据表的情况下我们都不需要创建模型,而更多时候我们可能需要在模型中做其他事情,比如数据格式转换,更新统计数据、更新缓存等。

    现在我们来设计一个控制器使用BlogModel中定义的方法,我们假设上述模型所在的文件路径为/App1/Model/Blog/BlogModel.php

    控制器路径为/App1/Controller/Home/BlogController.php

    class BlogController extends GF_Controller {

    1. public $BlogModel;
    2. public function _initialize() {
    3. $this->$BlogModel = D('Blog.Blog'); //初始化函数,不用每次都实例化模型
    4. }
    5. //创建新记录
    6. public function add () {
    7. //该数据仅作为讲解使用,通常这些数据来自表单提交。
    8. $data['title'] = '测试文章';
    9. $data['content'] = '测试内容';
    10. $data['ctime'] = time();
    11. $res = $this->BlogModel->create($data);
    12. if ($res !== false) {
    13. echo '添加成功';
    14. }
    15. else {
    16. echo '添加失败';
    17. }
    18. }
    19. //修改记录
    20. public function update() {
    21. $new_data['title'] = '更新标题';
    22. $new_data['content'] = '更新内容';
    23. $new_data['utime'] = time();
    24. $condition['id'] = $id; //文章id为更新条件,此id可以通过GET或者Cookie方式获取
    25. $res = $this-&gt;BlogModel-&gt;<span style="white-space:normal;">update</span>($condition, $new_data);
    26. if ($res !== false) {
    27. echo &#39;修改成功&#39;;
    28. }
    29. else {
    30. echo &#39;修改失败&#39;;
    31. }
    32. }
    33. //读取一条记录
    34. public function show() {
    35. $id = $_GET[&#39;id&#39;];
    36. $blog = $this-&gt;BlogModel-&gt;readOne($id);
    37. dump($blog);
    38. }
    39. //读取全部记录列表
    40. public function listShow() {
    41. $list = $this-&gt;BlogModel-&gt;readAll();
    42. dump($list);
    43. }
    44. //删除一条记录
    45. public function delete() {
    46. $id= $_GET[&#39;id&#39;];
    47. if ($this-&gt;BlogModel-&gt;deleteOne($id)) {
    48. echo &#39;删除成功&#39;;
    49. }
    50. else {
    51. echo &#39;删除失败&#39;;
    52. }
    53. }

    }

    本文为您详细介绍了模型的CURD方法以及控制器调用模型,实际上控制器可以不通过模型文件直接对数据表进行操作。还记得快速实例化数据表的方法吗?看如下代码:

    class BlogController extends GF_Controller {

    1. //快速实例化数据表方法
    2. //创建数据
    3. public function add() {
    4. $BlogModel = M(&#39;blog&#39;);
    5. $data[&#39;title&#39;] = &#39;测试文章&#39;;
    6. $data[&#39;content&#39;] = &#39;测试内容&#39;;
    7. $data[&#39;ctime&#39;] = time();
    8. $res = $BlogModel-&gt;add($data);
    9. if ($res !== false) {
    10. echo &#39;添加成功&#39;;
    11. }
    12. else {
    13. echo &#39;添加失败&#39;;
    14. }
    15. }
    16. //修改记录
    17. public function update() {
    18. $BlogModel = M(&#39;blog&#39;);
    19. $new_data[&#39;title&#39;] = &#39;更新标题&#39;;
    20. $new_data[&#39;content&#39;] = &#39;更新内容&#39;;
    21. $new_data[&#39;utime&#39;] = time();
    22. $condition[&#39;id&#39;] = $id; //文章id为更新条件,此id可以通过GET或者Cookie方式获取
    23. $res = $BlogModel-&gt;save($condition, $new_data);
    24. if ($res !== false) {
    25. echo &#39;修改成功&#39;;
    26. }
    27. else {
    28. echo &#39;修改失败&#39;;
    29. }
    30. }
    31. //读取一条记录
    32. public function show() {
    33. $BlogModel = M(&#39;blog&#39;);
    34. $id = $_GET[&#39;id&#39;];
    35. $condition[&#39;id&#39;] = $id;
    36. $blog = $BlogModel-&gt;where($condition)-&gt;find();
    37. dump($blog);
    38. }
    39. //读取全部记录列表
    40. public function listShow() {
    41. $BlogModel = M(&#39;blog&#39;);
    42. $list = $BlogModel-&gt;order(&#39;id asc&#39;)-&gt;select();
    43. dump($list);
    44. }
    45. //删除一条记录
    46. public function delete() {
    47. $BlogModel = M(&#39;blog&#39;);
    48. $id= $_GET[&#39;id&#39;];
    49. $condition[&#39;id&#39;] = $id;
    50. if ($BlogModel-&gt;delete($condition)) {
    51. echo &#39;删除成功&#39;;
    52. }
    53. else {
    54. echo &#39;删除失败&#39;;
    55. }
    56. }

    }

    实际上这个全新定义的控制器是不需要开发人员定义模型文件的,这样是不是更加简单呢!

    本文介绍了两种风格对数据表进行CURD的方式:

    一种需要开发人员定义模型类,引用方式为D('Home.Blog'),其中Home为模型分组,这不是必须的,如果BlogModel.php文件直接放在Model目录下,也就是/App1/Model/BlogModel.php,那么实例化的方法就是D('Blog'),这样就不需要分组了。模型分组只是用来更清晰的管理模型文件,但不是必须的。

    另外一种方式是不需要定义模型类即可对数据表进行CURD操作,这样会更加便捷,方法是M('blog'),便可以快速实例化gfblog数据表,其中gf是配置文件中定义的数据表前缀。这种方式的优点是便捷,缺点是没有定义模型文件将来必然会在控制器中有很多数据处理代码,使得控制器文件臃肿,所以还是建议开发人员针对每一张数据表定义Model类文件。同样,Model类存在的另一个意义在于复用,所以从这个角度来说一些数据处理还是需要封装在Model类文件中。

    原文: http://www.g-framework.com/doc/35.html