当前位置: 首页 > ThinkPHP > 正文

ThinkPHP的CURD操作

ThinkPHP 提供了灵活和方便的数据操作方法,不仅实现了对数据库操作的四大基本操作(CURD):创建、读取、更新和删除的实现,还内置了很多实用的数据操作方法,提供了 ActiveRecords 模式的最佳体验。
Model 类将数据库操作统一为 CURD 和一个 SQL 查询方法,也就是
_create 新增 (写入)数据
_update 更新 (保存)数据
_read 读取(查询)数据
_delete 删除数据
_query SQL 查询
其它的所有方法基本上对你调用这些基础方法进行操作,但是我们无需关注这些细节,只需要按照提供的抽象方法来操作,我们来看看在 ThinkPHP 中是怎么进行数据操作的。
1、新建记录
复制代码

  1. // 实例化一个 User 模型对象
  2. $User = new UserModel();
  3. // 然后给数据对象赋值
  4. $User‐>name = ‘ThinkPHP’;
  5. $User‐>email = ‘ThinkPHP@gmail.com’;
  6. // 然后就可以保存新建的 User 对象了
  7. $User‐>add();
  8. // 如果需要锁实例化模型对象的时候传入数据,可以使用
  9. $data[‘name’] = ‘ThinkPHP’;
  10. $data[‘email’] = ‘ThinkPHP@gmail.com’;
  11. $User = new UserModel($data);
  12. $User‐>add();
  13. // 或者直接在 add 方法传入要新建的数据
  14. $data[‘name’] = ‘ThinkPHP’;
  15. $data[‘email’] = ‘ThinkPHP@gmail.com’;
  16. $User = new UserModel();
  17. $User‐>add($data);
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  

如果你的主键是自动增长类型,不需要传入主键的值就可以新建数据,并且如果插入数据成功的话,Add 方法的返回值就是最新插入的主键值,可以直接获取。
复制代码

  1. $insertId = $User‐>add($data);

一般情况下,应用中的数据对象不太可能通过手动赋值的方式写入,而是有个数据对象的创建过程。
ThinkPHP 提供了一个 create 方法来创建数据对象,然后进行其它的新增或者编辑操作。
复制代码

  1. $User = D(“User”);
  2. $User‐>create(); // 创建 User 数据对象,默认通过表单提交的数据进行创建
  3. $User‐>add(); // 新增表单提交的数据
  4.  
  5.  

Create 方法支持从其它方式创建数据对象,例如,从其它的数据对象,或者数组等
复制代码

  1. $data[‘name’] = ‘ThinkPHP’;
  2. $data[‘email’] = ‘ThinkPHP@gmail.com’;
  3. $User‐>create($data);
  4. // 从 User 数据对象创建新的 Member 数据对象
  5. $Member = D(“Member”);
  6. $Member‐>create($User);
  7.  
  8.  
  9.  
  10.  
  11.  

支持新增多条记录
复制代码

  1. $User = new UserModel();
  2. $data[0][‘name’] = ‘ThinkPHP’;
  3. $data[0][‘email’] = ‘ThinkPHP@gmail.com’;
  4. $data[1][‘name’] = ‘流年’;
  5. $data[1][‘email’] = ‘liu21st@gmail.com’;
  6. $User‐>addAll($data);
  7.  
  8.  
  9.  
  10.  
  11.  

在 MySql 数据库下面,会自动使用一条 SQL 语句实现多数据的插入。
2、查询记录
读 取数据库的记录我觉得是数据库操作中的最有意思的一件事情了,写过文本数据库的人都知道,保存和删除数据不难 (无非是规范和效率问题),难在可以通过各 种方式来查找需要的数据。ThinkPHP 通过各种努力,让数据库的查询操作变得轻而易举,也让 ThinkPHP 变得富有内涵。
ThinkPHP 有 一个非常明确的约定,就是单个数据查询和多个数据查询的方法是分开的,或者你会认为有时候自己也不知道要查询的数据是单个还是多个,但是有一点是明确的, 你需要的是返回一个数据还是希望返回的是一个数据集。因为对两种类型的返回数据的操作方式是截然不同的,无论何种方式的返回,我们都可以直接在模型对象里 面操作,当然也一样可以作为数据传递给你需要的变量。
先举个最简单的例子,假如我们要查询主键为 8 的某个用户记录,我们可以使用下面的一些方法:
复制代码

  1. $User‐>find(8);

这个作为查询语言来说是最为直观的,如果查询成功,查询的结果直接保存在当前的数据对象中,在进行下一次查询操作之前,我们都可以提取,例如获取查询的结果数据:
复制代码

  1. $name = $User‐>name;
  2. $email = $User‐>email;
  3.  

遍历查询到的数据对象属性
复制代码

  1. foreach ($User as $key=>$val){
  2. echo($key.’:’.$val);
  3. }
  4. // 或者进行相关的数据更改和保存操作
  5.  
  6.  
  7.  

也可以用变量保存下来以便随时使用。
复制代码

  1. $user = $User‐>find(8);

对于上面的查询条件,我们还可以使用getById 来完成相同的查询
复制代码

  1. $User‐>getById(8);

需要注意的是,对于 find 方法来说,即使查询结果有多条记录,也只会返回符合条件的第一条记录,如果要返回符合要求的所有记录,请使用 findAll 方法。
复制代码

  1. // 查询主键为 1、3、8 的记录集
  2. $User‐>findAll(‘1,3,8’);
  3. // 遍历数据列表
  4. foreach ($User as $vo){
  5. dump($vo‐>name);
  6. }
  7.  
  8.  
  9.  
  10.  
  11.  

3、更新记录
了解了查询记录后,更新操作就显得非常简单了。
复制代码

  1. $User‐>find(1); // 查找主键为 1 的数据
  2. $User‐>name = ‘TOPThink’; // 修改数据对象
  3. $User‐>save(); // 保存当前数据对象
  4. // 还可以使用下面的方式更新
  5. $User‐>score = ‘(score+1)’; // 对用户的积分加 1
  6. $User‐>save();
  7.  
  8.  
  9.  
  10.  
  11.  

如果不是使用数据对象的方式来保存,可以传入要保存的数据和条件
复制代码

  1. $data[‘id’] = 1;
  2. $data[‘name’] = ‘TopThink’;
  3. $User‐>save($data);
  4.  
  5.  

除了 save 方法外,你还可以使用 setField 方法来更新特定字段的值,例如:
复制代码

  1. $User‐>setField(“name”,”TopThink”,’id=1’);

同样可以支持对字段的操作
复制代码

  1. $User‐>setField(“score”,”(score+1)”,’id=1’);
  2. // 或者改成下面的
  3. $User‐>setInc(“score”,’id=1’);
  4.  
  5.  

4、删除记录
复制代码

  1. $User‐>find(2);
  2. $User‐>delete(); // 删除查找到的记录
  3. $User‐>delete(‘5,6’); // 删除主键为 5、6 的数据
  4. $User‐>deleteAll(); // 删除查询出来的所有数据

本文固定链接: http://www.wllm.com.cn/archives/4583.html | 极限手指

该日志由 极限手指 于2012年12月23日发表在 ThinkPHP 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ThinkPHP的CURD操作 | 极限手指

ThinkPHP的CURD操作:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!