在 Hyperf 中使用 ORM(如基于 Hyperf\DbConnection\Model\Model
的模型类)时,常用的 Model
方法可以大致分为以下几类:查询类、创建类、更新类、删除类、聚合类等。
下面我将分类列出常用方法、示例以及使用场景,方便你在开发中快速参考。
✅ 一、查询类
方法 | 示例用法 | 使用场景 |
---|
find($id) | User::find(1) | 按主键查询一条记录 |
findOrFail($id) | User::findOrFail(1) | 找不到就抛异常 |
first() | User::where('email', 'a@b.com')->first() | 获取第一条匹配记录 |
firstOrFail() | 同上但找不到抛异常 | 用于必须找到一条数据的情况 |
get() | User::where('status', 1)->get() | 获取多条记录 |
pluck() | User::pluck('email') | 获取单字段集合 |
value() | User::where('id', 1)->value('email') | 获取某字段值 |
exists() | User::where('email', 'a@b.com')->exists() | 判断是否存在 |
count() | User::where('status', 1)->count() | 计数 |
paginate() | User::paginate(15) | 分页数据 |
chunk($size, $callback) | User::chunk(100, fn($users) => ... ) | 分批处理大数据集 |
✅ 二、插入类
方法 | 示例用法 | 使用场景 |
---|
create([...]) | User::create(['name' => 'Tom']) | 使用 fillable 插入数据 |
insert([...]) | User::insert([['name' => 'Tom'], ['name' => 'Bob']]) | 批量插入 |
insertOrIgnore([...]) | User::insertOrIgnore([...]) | 插入时忽略重复键冲突 |
firstOrCreate() | User::firstOrCreate(['email' => 'a@b.com'], ['name' => 'Tom']) | 如果不存在则创建 |
updateOrCreate() | User::updateOrCreate(['email' => 'a@b.com'], ['name' => 'Tom']) | 存在更新,不存在创建 |
✅ 三、更新类
方法 | 示例用法 | 使用场景 |
---|
update([...]) | User::where('id', 1)->update(['name' => 'New']) | 批量更新 |
increment('age') | User::where('id', 1)->increment('age') | 累加字段值 |
decrement('age') | 同上 | 累减字段值 |
$model->save() | $user->name = 'New'; $user->save(); | 保存当前模型状态 |
✅ 四、删除类
方法 | 示例用法 | 使用场景 |
---|
destroy($id) | User::destroy(1) 或 destroy([1,2,3]) | 按主键删除 |
delete() | User::where('status', 0)->delete() | 条件删除 |
$model->delete() | $user->delete() | 删除当前模型实例 |
✅ 五、聚合类
方法 | 示例用法 | 使用场景 |
---|
count() | User::count() | 记录总数 |
max('score') | User::max('score') | 最大值 |
min('score') | User::min('score') | 最小值 |
avg('score') | User::avg('score') | 平均值 |
sum('score') | User::sum('score') | 总和 |
✅ 六、其他辅助方法
方法 | 示例用法 | 使用场景 |
---|
with('relation') | User::with('posts')->get() | 预加载关系 |
toArray() | $user->toArray() | 转数组 |
toJson() | $user->toJson() | 转 JSON |
refresh() | $user->refresh() | 重新从数据库加载数据 |
✅ 示例:完整的使用场景(用户注册流程)
$user = User::firstOrCreate(
['email' => 'tom@example.com'],
['name' => 'Tom', 'password' => Hash::make('secret')]
);
- 场景:注册时查找用户是否存在,存在就返回,不存在就新建;
- 自动填充
created_at
、updated_at
字段。