全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php增删改查在thinkphp里怎么写_tp模型curd方法使用【指南】

ThinkPHP模型CRUD必须继承think\Model并置于app\model\目录下,类名与表名对应(可配置$table和$pk),查询返回Model实例或Collection,增删改须带where条件,事件验证仅在Model操作中触发。

ThinkPHP 的模型 CRUD 不是直接写 SQL,而是通过模型类封装的链式方法操作数据库,核心在于理解 Db 类和 Model 类的区别——用 Model 才算真正“TP 模型 CURD”,它自带字段验证、事件、自动完成等能力;纯 Db::table() 属于查询构建器,不算模型层。

怎么定义一个可用的模型类

必须继承 think\Model,类名与数据表名默认对应(如 User 模型对应 user 表),且需放在 app\model\ 目录下。不规范命名或路径错误会导致 Class 'app\model\User' not found

  • 文件路径必须是 app\model\User.php
  • 类名必须是 User,首字母大写,不能写成 userUsers
  • 如果表名不是 user,要在模型里显式指定:
    protected $table = 'tb_user';
  • 主键非 id 时,要设置:
    protected $pk = 'user_id';

查:find()、select()、where() 链式调用要注意什么

模型查询返回的是 think\Model 实例(单条)或 think\Collection(多条),不是原始数组。直接 echo $user->name 可以,但 echo $user['name'] 会报错。

  • find() 参数传整数是按主键查,传数组是复合条件(如 User::find(['status' => 1])),但更推荐统一用 where()->find()
  • select() 总是返回集合,即使只有一条记录,也不能直接取属性:$users = User::where('status', 1)->select(); echo $users[0]->name;
  • 字段别名、聚合函数需用 field() 显式声明,否则会被自动过滤:
    User::field('id, name, COUNT(*) as total')->group('status')->select();
  • 软删除模型(启用 SoftDelete trait)默认不查已删除数据,要用 withTrashed()onlyTrashed()

增:save() 和 create() 已废弃,只用 data() + save() 或 create()

TP6+ 中 create() 方法被移除,save() 必须配合 data() 或直接传数组。空模型调用 save() 不会插入数据,必须先赋值。

  • 正确写法(推荐):
    $user = new User();
    $user->data(['name' => '张三', 'email' => 'z@example.com']);
    $user->save();
  • 或一步到位:
    User::create(['name' => '李四', 'email' => 'l@example.com']);
    (注意:该方法会触发验证和事件)
  • 批量插入用 saveAll(),参数是二维数组:
    User::saveAll([
        ['name' => 'A', 'email' => 'a@x'],
        ['name' => 'B', 'email' => 'b@x']
    ]);
  • 如果模型设置了 $autoWriteTimestamp = truecreate_timeupdate_time 字段会自动写入,无需手动传

删和改:where() 不写会全表操作,非常危险

delete()save() 都依赖前置的 where() 条件,漏写等于清空或更新整张表。TP 不做“无 where 保护”,线上环境务必加日志或调试开关校验 SQL。

  • 安全删除示例:
    User::where('id', 123)->delete(); // 删除单条
  • 更新必须带条件:
    User::where('id', 123)->save(['status' => 2]);
  • 自增/自减用 inc() / dec()
    User::where('id', 123)->inc('score', 10)->update();
  • 软删除不是 delete(),而是 delete(true) 或直接调用 trash()(如果模型用了 SoftDelete)

最易被忽略的是模型事件和验证的触发时机:只有通过 Model 实例的 save()create()update() 才会触发 before_insert 等事件;用 Db::name('user')->where(...)->update(...) 完全绕过模型层,字段自动处理、事件、验证全部失效。


# php  # thinkphp  # app  # ai  # 区别  # 聚合函数  # sql  # echo  # 封装  # select  # 继承  # class  # Collection  # delete  # 事件  # table  # 数据库  # 链式  # 的是  # 主键  # 单条  # 放在  # 目录下  # 才会  # 要在  # 要注意  # 用了 


相关文章: 建站之星如何快速更换网站模板?  如何选择美橙互联多站合一建站方案?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  MySQL查询结果复制到新表的方法(更新、插入)  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  ,怎么在广州志愿者网站注册?  制作企业网站建设方案,怎样建设一个公司网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  建站之星备案是否影响网站上线时间?  建站之星会员如何解锁更多建站功能?  定制建站方案优化指南:企业官网开发与建站费用解析  网站app免费制作软件,能免费看各大网站视频的手机app?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何高效生成建站之星成品网站源码?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  公司门户网站制作流程,华为官网怎么做?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  微课制作网站有哪些,微课网怎么进?  如何在阿里云ECS服务器部署织梦CMS网站?  宝塔建站后网页无法访问如何解决?  如何用wdcp快速搭建高效网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  网站制作话术技巧,网站推广做的好怎么话术?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  怀化网站制作公司,怀化新生儿上户网上办理流程?  已有域名能否直接搭建网站?  网站按钮制作软件,如何实现网页中按钮的自动点击?  存储型VPS适合搭建中小型网站吗?  ,柠檬视频怎样兑换vip?  建站主机CVM配置优化、SEO策略与性能提升指南  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何选择建站程序?包含哪些必备功能与类型?  如何高效完成自助建站业务培训?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何自定义建站之星模板颜色并下载新样式?  如何在万网自助建站平台快速创建网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  制作营销网站公司,淘特是干什么用的?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  黑客如何利用漏洞与弱口令入侵网站服务器?  郑州企业网站制作公司,郑州招聘网站有哪些?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  c++怎么用jemalloc c++替换默认内存分配器【性能】  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何通过建站之星自助学习解决操作问题?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何选择适配移动端的WAP自助建站平台? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。