在thinkphp 8.0中,必须通过正确命名空间、显式设置$name属性绑定数据表,并严格遵循orm规范才能安全高效完成curd;跳过映射或误用m()将导致失败。

要在ThinkPHP 8.0中仅靠一个Model类就安全、高效地完成数据表的增删改查,必须准确建立模型与数据表的映射关系,并严格遵循新版ORM的调用规范——跳过映射配置或误用旧版M()函数将导致查询失败或字段丢失。
创建模型并绑定数据表
在app/model目录下新建User.php文件,继承think\Model而非旧版think\Model(注意命名空间):
使用php代码块中的命名空间和类定义方式,确保首字母大写且文件名与类名完全一致;若类名是User,文件名必须是User.php,否则自动加载失败。
在类内部显式声明protected $name = 'user';——这一步【不可省略】,TP8不再自动推导表名,不设$name会导致所有操作默认指向不存在的user表(即使数据库里有users表也查不到)。
若表前缀为think_,则写$prefix = 'think_';并配合$name = 'user',最终映射为think_user表。
执行新增操作
方法一:实例化后赋值再保存
$user = new User();
$user->name = '张三';
$user->email = 'zhangsan@example.com';
$user->save();
方法二:直接传入关联数组
$user = new User();
$user->save(['name' => '李四', 'email' => 'lisi@example.com']);
方法三:批量插入多条记录
User::insert([
['name' => '王五', 'email' => 'wangwu@example.com'],
['name' => '赵六', 'email' => 'zhaoliu@example.com']
]);
注意:批量插入不触发模型事件,也不走验证器;如需校验,请改用循环+save()。
执行查询操作
第一步:查单条记录(主键查询)
$user = User::find(1); // 返回User对象,未找到返回null
第二步:查单条记录(条件查询)
$user = User::where('email', 'zhangsan@example.com')->find();
第三步:查多条记录
$users = User::where('status', 1)->select(); // 返回Collection对象
第四步:只取指定字段
$names = User::where('status', 1)->column('name'); // 返回索引数组['张三','李四']
第五步:查单个值
$count = User::where('status', 1)->count(); // 直接返回整数
执行更新操作
方法1:通过主键更新
User::update(['name' => '新名字'], ['id' => 5]);
方法2:先查后改
$user = User::find(5);
if ($user) {
$user->name = '新名字';
$user->save();
}
方法3:条件批量更新
User::where('status', 0)->update(['status' => 1]);
⚠️重要提醒:【User::update()第一个参数是数据,第二个参数才是条件数组】,顺序颠倒会覆盖整张表——这是TP8最常踩的坑。
执行删除操作
软删除启用后,delete()不会真正删库,而是标记delete_time字段。若要硬删,必须显式调用forceDelete():
$user = User::find(5);
$user->forceDelete();
按条件删除多条记录:
User::where('status', 0)->delete();
⚠️警告:不带任何where条件调用delete()会抛出Think\Exception异常,阻止全表误删——这是TP8的安全加固机制,不要试图绕过。
彻底清空表(慎用):
User::where('1')->delete();
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











