查看: 138|回复: 0

[tp6] thinkphp6使用模型操作查询数据库

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2026-5-28 16:57:08 | 显示全部楼层 |阅读模式
一、find查单条数据:
1、查单条数主键查询,例如:
  1. User::find(1)//这里使用ID=1是主键
复制代码
2、单条数据条件(查询构造器)查询,例如:
  1. User::where('mobile', '13000000000')->find();
复制代码
3、为了防止查询的数据不存在返回null,我们可以使用:
a、主键查询示例代码:
  1. User::findOrEmpty(1);
复制代码
b、条件查询示例代码:
  1. User::where('mobile', '13000000000')->findOrEmpty();
复制代码
假设我们前面的查询都是赋值给了$user,那么我们使用$user->name就可以使用name的值了。
要查询一个查询返回的是否空模型,我们可以用isEmpty()方法。
  1. $user = User::where('name', 'thinkphp')->findOrEmpty();
  2. if (!$user->isEmpty()) {
  3.     echo $user->name;
  4. }
复制代码

二、select查多条用数据:
1、根据主键查询多条记录,例如:
  1. $list = User::select([1,2,3]);
复制代码
2、根据条件(查询构造器)查询多条记录,例如:
  1. $list = User::where('status', 1)->limit(3)->order('id', 'asc')->select();
复制代码
3、对查询到的数据集进行遍历操作:
  1. foreach($list as $key=>$user){
  2.     echo $user->name;
  3. }
复制代码
4、数据批量处理,适合处理大批量数据的情况,示例代码如下:
  1. User::chunk(100, function ($users) {
  2.     foreach($users as $user){
  3.         // 处理user模型对象
  4.     }
  5. });
复制代码

当然也可以加条件查询,但chunk必须放最后,比如:
  1. // 先拼条件 → 最后再 chunk
  2. User::where('status', 1)      // 条件1
  3.     ->where('age', '>', 18)   // 条件2
  4.     ->order('id', 'asc')      // 排序
  5.     ->chunk(100, function ($users) {  // 每次查100条
  6.         
  7.         // $users 就是满足上面条件的 100 条数据
  8.         foreach($users as $user){
  9.             // 处理
  10.         }
  11. });
复制代码

5、游标查询适合大批量数据,比如十几万几十万数据使用cursor()查询,例如:
  1. $cursor = User::where('status', 1)->cursor();
  2. foreach ($cursor as $user) {
  3.     echo $user->name;
  4. }
复制代码
第一行的cursor()返回的$cursor是一个游标/生成器,不是数组,当进入foreach循环后才开始去取下一条记录,php内存中永远只有一条数据。
也可以直接在foreach中直接按照如下写法,无需先赋值到$cursor,代码如下:
  1. foreach (User::where('status',1)->cursor() as $user) {
  2.     // $user 是 User 模型对象
  3.     echo $user->name;
  4. }
复制代码
在数据量很大,万级数量以上,需要导出CSV、批量更新、数据迁移的情况下适合用cursor。


重要:tp6不再支持get()查询。
道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部