博客列表 >thinkPHP 联表查询与Model模型

thinkPHP 联表查询与Model模型

吴长清
吴长清原创
2022年08月31日 11:28:47670浏览

1.联表查询

JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

  1. // 匹配所有满足条件的数据
  2. $ret = Db::table('user u')->join('order o', 'u.id=o.uid')->select();
  3. print_r($ret);
  4. // 以左表作为主表,查询右表中满足条件的数据 不满足则返回的字段的值为null
  5. $ret = Db::table('user u')->leftjoin('order o', 'u.id=o.uid')->select();
  6. print_r($ret);
  7. // 以右表作为主表,查询左表中满足条件的数据 不满足则返回的字段的值为null
  8. $ret = Db::table('user u')->rightjoin('order o', 'u.id=o.uid')->select();
  9. print_r($ret);

2.Model模型

2.1 Model的创建

  • 请确保你已经在数据库配置文件database.php中配置了数据库连接信息
  • 模型会自动对应数据表,如果在:config/database.php 文件里设置了表前缀prefix,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写;反之模型的命名规则不去表前缀,同样采用驼峰法命名,并且首字母大写,且要去掉下划线
  • app目录下新建model目录,并在model目录下建立User.php文件,User对应数据库中的user

  • User.php
  1. <?php
  2. namespace app\model;
  3. use think\Model;
  4. class User extends Model
  5. {
  6. // 方法
  7. }

2.2 Model查询数据库、配置、修改器及获取器

model目录下User.php模型

  1. <?php
  2. // 命名空间与当前模型路径保持一致
  3. namespace app\model;
  4. // 引入think框架中的Model
  5. use think\Model;
  6. // 模型名称与文件名称保持一致
  7. class User extends Model
  8. {
  9. // 设置当前模型的数据库连接
  10. // 若查询其他数据库可做更改,
  11. // 因为User模型下默认表名为user表,所以要注意该库中是否有user表 若无则需更改表名称
  12. protected $connection = 'test';
  13. // 设置表名称
  14. // User模型下默认表名为user表 若查询其他表可在此更改
  15. protected $name = 'order';
  16. // 改变主键的名称
  17. protected $pk = 'id';
  18. // 设置废弃字段 数组
  19. // 废弃数据表中'phone'和'last_time'字段 ,在进行查询的时候不返回这两个字段
  20. protected $disuse = [
  21. 'phone',
  22. 'last_time'
  23. ];
  24. // 设置模型对应数据表字段及类型 数组
  25. // 数据类型转换
  26. protected $type = [
  27. 'id' => 'int',
  28. 'password' => 'string',
  29. 'address' => 'string'
  30. ];
  31. // 查询所有数据,此方法在controller控制器啊中实例化调用
  32. public function lists()
  33. {
  34. // 查询user表中的所有数据
  35. // 这里的User对应数据库中的user表 且User就是模型的名称
  36. return User::select()->toArray();
  37. }
  38. // 根据主键查询数据且数据表中主键名称必须为‘id’
  39. // 若是数据表中的主键名称不是id,可以通过$pk来设置
  40. public function findId($id)
  41. {
  42. // 根据主键id查询数据
  43. return User::find($id);
  44. }
  45. // 获取器 对接收的参数进行处理
  46. // 格式:get + 数据表中某一字段 + Attr
  47. // 接收一个参数$v 当前字段’status‘的值
  48. public function getStatusAttr($v)
  49. {
  50. return $v ? '关闭' : '开启';
  51. }
  52. // 获取器 将查询的性别sex初始化
  53. public function getSexAttr($v)
  54. {
  55. return $v ? '男' : '女';
  56. }
  57. // 修改器 在数据添加到数据库之前对数据进行处理
  58. // 在create方法时触发
  59. // 格式: set + 数据表中某一字段 + Attr
  60. // 接收两个参数,$v:当前字段的值,$all:所有字段的值
  61. public function setPasswordAttr($v, $all)
  62. {
  63. //打印所有数据
  64. print_r($all);
  65. // 对psssword字段的值进行加密处理
  66. return md5($v);
  67. }
  68. // 添加数据
  69. public function insertOne($data)
  70. {
  71. //添加数据 并将添加数据的结果返回
  72. return User::create($data);
  73. }
  74. }

controller目录下user.php关键代码

  1. // 实例化模型
  2. $users = new User();
  3. // 得到user表的所有数据
  4. $ret = $users->lists();
  5. print_r($ret);
  6. // 根据id得到数据
  7. $ret = $users->findId(1);
  8. print_r($ret);
  9. // 数据
  10. $data = [
  11. 'name' => '小米粒',
  12. 'password' => 123456,
  13. 'phone'=>'12345678789',
  14. 'sex' => 0,
  15. 'email' => 'xiaomili@php.cn',
  16. 'address'=>'贵阳市观山湖区',
  17. 'status' => 0,
  18. 'add_time' => 1661737536
  19. ];
  20. // 添加数据
  21. $ret = $users->insertOne($data);
  22. print_r($ret);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议