分享

(8)学习tp5之ORM操作数据库

 火炉与猫咪 2019-04-22
 ORM是在M层(模型)中用的一种技术(工具,既然是工具它就有名字,它的名字就是Db类

orm即可以在C层直接使用,也可以在M层直接使用

orm:对象关系模型映射,它把数据库中的每一张表映射成对象了。然后要操作这个表的时候,就用对象调方法(如->select()),用面向对象的形式就可以了。这样就不用写原生sql语句了

控制器文件命名,采用大驼峰。可加Controller,也可不加,建议不加

路由:


控制器代码(orm在控制器中直接使用):

  1. //原生,使用了参数绑定
  2. public function protogenesis()
  3. {
  4. Db::execute('insert into tp5_user (name,password) values (:name,:password)',['name'=>'xg','password'=>'123456']);
  5. $res = Db::query('select * from tp5_user ');
  6. dump($res);
  7. }
  8. //面向对象【添加】
  9. public function objAdd(){
  10. $data = [
  11. 'name' => 'yx',
  12. 'password' => '123'
  13. ];
  14. $id = Db::name('user')->insert($data,false,true); //第3个参数,返回插入的id
  15. dump($id);
  16. }
  17. //面向对象【查询】
  18. public function objSelect(){
  19. //技巧:field()和where()等方法都可以使用数组进行传参
  20. //1、【选取】数组里面放id 会解析成子查询; SELECT * FROM `tp5_user` WHERE `id` IN (2,3);
  21. $res = Db::name('user')->select([2,3]);
  22. //2、【或者条件】age等于30 || 等于80的;
  23. //SELECT * FROM `tp5_user` WHERE `age` = 30 AND `id` IN (2,3) OR `age` = 100;注意:这样子查询会失效
  24. $res = Db::name('user')->where('age',30)->whereOr('age',100)->select([2,3]);
  25. //3、【并且条件】SELECT * FROM `tp5_user` WHERE `id` = 4 AND `age` = 26
  26. $where = ['id'=>4,'age'=>'26'];
  27. $res = Db::name('user')->where($where)->select();
  28. //4、【打印curd的sql语句】加上fetchSql();SELECT * FROM `tp5_user` WHERE `id` = 1 LIMIT 1
  29. $res = Db::table('tp5_user')->fetchSql(true)->find(1);
  30. //5、【字段取反】field()加上第2个参数,是不查name字段; SELECT `id`,`password`,`age` FROM `tp5_user`
  31. $res = Db::table('tp5_user')->field(['name'],true)->select();
  32. //6、【使用内置函数】查指定字段(年龄)的总和;SELECT sum(age) FROM `tp5_user`
  33. $res = Db::table('tp5_user')->field(['sum(age)'])->select();
  34. //7、【使用关键字去重】SELECT DISTINCT `name` FROM `tp5_user`
  35. $res = Db::table('tp5_user')->distinct(true)->field('name')->select();
  36. /* 8、连表查询
  37. 内连 == 匹配条件相等,2张表里都有的
  38. 左连 == 左表里有多少条就打印出来多少条,匹配不上的,右表字段显示null
  39. 右连 == 右表里有多少条就打印出来多少条,匹配不上的,左表字段显示null
  40. * */
  41. $res = Db::name('article')
  42. ->alias('a')
  43. ->join('cat c','a.cat_id=c.id')
  44. ->field(['a.id','a.title','a.content','c.cat_name']) //join的时候不能用排除
  45. ->select();
  46. //9、如果事物失效,查错思路,注释掉提交事物,如果还能执行sql语句,就不要想代码错误了,想其他的 如:表引擎
  47. Db::startTrans(); // 启动事务
  48. try{
  49. Db::table('tp5_user')->where(['id'=>1])->update(['age'=>951]);
  50. $a = 1/0; //用错误字段 || 0不能做除数,来模拟失败
  51. Db::commit(); // 提交事务
  52. } catch (\Exception $e) {
  53. dump($e->getMessage());
  54. Db::rollback(); // 回滚事务
  55. }
  56. dump($res);
  57. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多