第6话:ORM操作
对象关系的映射模式似乎是每个
框架都非常关注的东西,因为这个层次的操作决定了用户使用的难易程度。当然,也存在一些思想观念的转换。所以,对面向过程的开发习惯的人,刚开始会觉得很不适应。虽然,我们也觉得之前的模式有时候挺麻烦。在开发
ThinkPHP之初,我就分析过很多的
面向对象的操作方式,思考如果才能体现一种方便而有效的数据存取。
因为ThinkPHP的ORM操作基于
数据库抽象层之上,所以并不需要考虑数据库本身的差异问题。这个留给数据库的接口来解决。并且借助于Dao模式来完成常用的操作。
ThinkPHP的存取操作并不复杂,而且也是容易理解的,下面举几个例子。
- // 创建User数据访问对象
- $dao = D("User");// 获取id为5的一个用户数据$user = $dao->getById(5);// 修改用户的名称$user->name = '流年';// 把修改的结果再保存到数据库$dao->save($user);
ORM的好处很明显,我们不需要关心如何连接数据库,如何写
SQL语句,以及如何对返回的结果进行分析获取。
再来看一个例子:
- // 创建书籍数据访问对象
- $dao = D("Books");// 取出所有type为2的书籍$books = $dao->findAll("type=2");// 统计书库里面type为3的书籍数目$count = $dao->getCount('type=3');// 取出第一本书籍$book1 = $dao->getFirst();// 取出第三本书籍$book3 = $dao->getN(3);// 删除id为7的书籍$dao->deleteById(7);// 增加一本newBook$dao->add($newBook);
可以看出ThinkPHP除了封装了CURD的实现外还提供了更多的功能。其实,ORM还包括关联操作的范畴,这块另外有时间在讨论了。