在 ThinkPHP 6 中,模型的查询封装可以帮助你更方便地操作数据库。模型是 ThinkPHP 的 ORM(对象关系映射)组件,它允许你使用面向对象的方式来操作数据库。下面是一些常用的模型查询封装方法和示例:
1. 基本查询
假设你有一个 User
模型,对应数据库中的 users
表。
use app\model\User;
// 查询一条记录
$user = User::find(1); // 根据主键查询
if ($user) {
echo $user->name;
}
// 查询多条记录
$users = User::where('status', 1)->select();
foreach ($users as $user) {
echo $user->name;
}
2. 条件查询
// 简单条件查询
$users = User::where('age', '>', 18)->select();
// 多条件查询
$users = User::where('status', 1)
->where('age', '>', 18)
->select();
// 或者使用数组
$users = User::where([
['status', '=', 1],
['age', '>', 18],
])->select();
3. 链式查询
ThinkPHP 支持链式调用,使查询更简洁。
$users = User::where('status', 1)
->order('create_time', 'desc')
->limit(10)
->select();
4. 聚合查询
// 统计数量
$count = User::where('status', 1)->count();
// 值、最小值、平均值等
$maxAge = User::max('age');
$minAge = User::min('age');
$avgAge = User::avg('age');
5. 使用查询构建器
ThinkPHP 的查询构建器功能强大,支持多种复杂查询。
// 使用查询表达式
$users = User::where('age', 'between', [18, 30])->select();
// 使用 LIKE 查询
$users = User::where('name', 'like', '%John%')->select();
// 使用 IN 查询
$users = User::where('id', 'in', [1, 2, 3])->select();
6. 模型关联
如果你需要查询关联数据,可以在模型中定义关联关系。
// 在 User 模型中定义关联
public function profile()
{
return $this->hasOne(Profile::class);
}
// 查询关联数据
$user = User::with('profile')->find(1);
if ($user->profile) {
echo $user->profile->bio;
}
7. 使用作用域
你可以在模型中定义局部作用域,以封装常用的查询逻辑。
// 在 User 模型中定义作用域
public function scopeActive($query)
{
return $query->where('status', 1);
}
// 使用作用域
$users = User::active()->select();
通过模型的查询封装,ThinkPHP 6 提供了灵活且强大的数据库操作能力。你可以根据业务需求,使用条件查询、链式调用、聚合函数、查询构建器、关联模型和作用域等功能,来高效地操作数据库。在实际开发中,合理地封装查询逻辑,可以显著提高代码的可读性和可维护性。