首页 PHP小记正文

thinkphp对增删该查的一些封装

刘伟 PHP小记 2018-06-17 102 0

  1. 本文实例讲述了thinkPHP数据库增删改查操作方法。分享给大家供大家参考,具体如下:
  2. thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活。
  3. 可以用封装的用,需要写sql,可以执行sql
  4. 1.原始的 
  5. $Model = new Model(); // 实例化一个model对象 没有对应任何数据表
  6. $insert_sql = "INSERT INTO sh_wxuser_collection (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
  7. $Model - >query($insert_sql);
  8.  
  9. 2.针对表实例化的,这里的表原名是sh_wxuser_collectionsh是前缀。
  10. $model = M('wxuser_collection'); //自动省去sh
  11. $insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
  12. $model - >query($insert_sql);
  13.  
  14. 另一种写法,_可以写成大写,它会自动转化成_
  15. $model = M('WxuserCollection'); //自动省去sh
  16. $insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
  17. $model - >query($insert_sql);
  18.  
  19. 3. 封装的add语句
  20. $model = M('WxuserCollection');
  21. $data = array('user_id' = >$user_id, 'store_id' = >$store_id, 'good_id' = >$good_id, 'addtime' = >$addtime);
  22. $model - >data($data) - >add();
  23.  
  24. 4.封装的修改edit语句
  25. $model = M('WxuserCollection');
  26. $data = array('user_id' = >$user_id, 'store_id' = >$store_id, 'good_id' = >$good_id, 'addtime' = >$addtime);
  27. $model - >data($data) - >where('id=3') - >save();
  28.  
  29. 确实挺方便的,但是方便之余,别忘了原始的sql,原汁原味的sql,才最有意思。
  30. 5.find()
  31. $model = M('WxuserCollection');
  32. $res1 = $model - >find(1);
  33. $res2 = $model - >find(2);
  34. $res3 = $model - >where('good_id=1105 AND store_id = 1 AND user_id = 20') - >find();
  35.  
  36. find获取一条数据,find(1)获取id1的数据,find(2)获取id2的数据。最后一个是获取条件为where的中的第一条数据。
  37. 5.select()
  38. $model = M('WxuserCollection');
  39. $res = $model - >where('good_id=1105 AND store_id = 1 AND user_id = 20') - >field('id,good_id as good') - >select();
  40.  
  41. 获取所有数据。这里的好处就是,不用考虑sql语句的顺序了,随心所欲调用函数就可以了。
  42. 6.delete()
  43. $model = M('WxuserCollection');
  44. $res = $model - >where('id=1') - >delete(); // 成功返回1 失败返回0
  45.  
  46. 根据条件进行删除操作
  47. 7.field()
  48. $model = M('WxuserCollection');
  49. $res = $model - >field('id,good_id as good') - >select();
  50. $res = $model - >field(array('id', 'good_id' = >'good')) - >select();
  51. $res = $model - >field('id', true) - >select();
  52.  
  53. 字符串,数组两种方式,第三个是表示获取处理id之外的所有字段。
  54. 8.order()
  55. $model = M('WxuserCollection');
  56. $res = $model - >order('id desc') - >select();
  57. $res = $model - >order('id asc') - >select();
  58. $res = $model - >order(array('id' = >'desc')) - >select();
  59. $res = $model - >order(array('id')) - >select();
  60.  
  61. 字符串,数组两种方式,默认asc
  62. 9.join()
  63. $Model->join(' work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select();
  64. $Model->join('RIGHT JOIN work ON artist.id = work.artist_id')->select();
  65. $Model->join(array(' work ON artist.id = work.artist_id','card ON artist.card_id = card.id'))->select();
  66.  
  67. 默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成第二种,
  68. 如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。
  69. 10.setInc()
  70. $User = M("User"); // 实例化User对象
  71. $User->where('id=5')->setInc('score',3); // 用户的积分加3
  72. $User->where('id=5')->setInc('score'); // 用户的积分加1
  73. $User->where('id=5')->setDec('score',5); // 用户的积分减5
  74. $User->where('id=5')->setDec('score'); // 用户的积分减1
  75.  
  76. 11.getField()
  77. 获取某个字段值
  78. $User = M("User"); // 实例化User对象
  79. // 获取ID为3的用户的昵称
  80. $nickname = $User->where('id=3')->getField('nickname');
  81.  
  82. 返回的nickname是一个字符串结果。也就是说,即使有满足条件的多个字段,也只会返回一个结果。
  83. 获取某个字段列
  84. 如果希望返回符合要求的字段列(多个结果),可以使用:
  85. $User = M("User"); // 实例化User对象
  86. // 获取status为1的用户的昵称列表
  87. $nickname = $User->where('status=1')->getField('nickname',true);
  88.  
  89. 第二个参数传入了true,返回的nickname则是一个数组,包含了所有满足条件的昵称列表。
  90. 如果需要限制返回结果数量,可以使用:
  91. $nickname = $User->where('status=1')->getField('nickname',8);
  92.  
  93. 获取2个字段列表
  94. $User = M("User"); // 实例化User对象
  95.  // 获取status为1的用户的昵称列表
  96. $nickname = $User->where('status=1')->getField('id,nickname');
  97.  
  98. 如果getField方法传入多个字段名称的话,默认返回一个关联数组,以第一个字段的值为索引(所以第一个字段要尽量选择不会重复的)。
  99. 获取多个字段列表
  100. $result = $User->where('status=1')->getField('id,account,nickname');
  101.  
  102. 如果传入了2个以上的字段名,则返回一个二维数组(类似select方法的返回值,区别在于索引是二维数组的键名是第一个字段的值)
  103. 综合使用案例
  104. $where = array('a.store_id' => $this->store_id, 'a.user_id' => $this->user_id);
  105. $collects = $this->collectModel->table("sh_wxuser_collection a")->field(array('b.name','b.price','b.oprice','b.logoimg','a.goods_id'))->limit($start, $offset)->order('a.addtime DESC')->where($where)->join(' sh_goods b ON a.goods_id = b.id')->select();// 获取当前页的记录
  106. echo M()->getLastSql(); // 调试sql语句用
  107. $count = $this->collectModel->table("sh_wxuser_collection a")->where($where)->count(); // 获取总的记录数
  108.  
  109. 这里由于结合了两张表,所以用到了table方法,重新定义表名,相应的条件和参数都要加上前缀。a. 或者b.
  110. 其中field字段要么是一个字符串,要么是数组。
  111. field('b.name', 'b.price', 'b.oprice', 'b.logoimg', 'a.goods_id') // 错误
  112.  
  113. 我之前就这么写,问题大大的。
  114. 使用框架,就不能灵活的写sql了。不过对sql有一个深刻的认识,也有利于灵活的使用好框架。
  115. 用于调试sql语句的方法。
  116. echo M()->getLastSql();
  117.  
  118. 很方便。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论