Blogger Information
Blog 48
fans 3
comment 1
visits 30304
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
thinkPHP 联表查询与Model模型
吴长清
Original
669 people have browsed it

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);
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post