悠悠楠杉
网站页面
标题:ThinkPHP数据库操作全解析:从连接到CRUD实战
关键词:ThinkPHP, 数据库操作, MySQL连接, CURD, 模型查询
描述:本文详细讲解ThinkPHP的数据库操作方法,包括MySQL连接配置、查询构建器使用、模型操作及事务处理,附带实战代码示例,助你快速掌握ThinkPHP数据交互核心技巧。
正文:
ThinkPHP作为国内流行的PHP框架,其数据库操作以简洁高效著称。无论是基础的连接配置还是复杂的查询构建,ThinkPHP都提供了丰富的解决方案。本文将系统梳理ThinkPHP的数据库操作体系,并重点演示如何与MySQL交互。
1. 配置文件连接(推荐)
在config/database.php中配置MySQL参数,这是最规范的实践方式:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'test_db',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8mb4',
],
],
];
2. 动态连接
适用于多数据库切换场景,通过Db::connect()实现:
use think\facade\Db;
$db = Db::connect([
'type' => 'mysql',
'hostname' => '192.168.1.100',
'database' => 'dynamic_db',
'username' => 'admin',
'password' => 'p@ssw0rd',
]);
3. 环境变量连接
在.env文件中配置,实现环境隔离:
DB_TYPE=mysql
DB_HOST=localhost
DB_NAME=prod_db
DB_USER=deploy
DB_PASS=secure_password
ThinkPHP的链式操作让查询更直观:
// 基础查询
$users = Db::name('user')
->where('status', 1)
->order('create_time', 'desc')
->limit(10)
->select();
// 复杂条件
Db::name('order')
->whereTime('pay_time', 'between', ['2023-01-01', '2023-12-31'])
->whereOr([
['price', '>', 1000],
['vip_level', 'in', [2,3]]
])
->fetchSql(true) // 查看生成的SQL
->select();
模型是ThinkPHP的ORM实现,推荐业务层使用:
namespace app\model;
use think\Model;
class User extends Model {
// 自动时间戳
protected $autoWriteTimestamp = true;
// 关联方法
public function profile() {
return $this->hasOne(Profile::class);
}
}
// 使用示例
$user = User::with('profile')
->where('name', 'like', '%张%')
->find();
$user->email = 'new@example.com';
$user->save();
确保数据一致性的关键操作:
Db::transaction(function(){
$order = Order::create([
'sn' => uniqid(),
'amount' => 99.9
]);
Account::where('user_id', 1)
->dec('balance', 99.9)
->update();
});
$list = Db::name('article')
->paginate(10, false, [
'query' => request()->param()
]);
Db::name('log')
->limit(1000)
->chunk(100, function($logs){
foreach($logs as $log){
// 批量处理逻辑
}
});
app/event.php中注册:
'DbQuery' => ['app\listener\DbQueryListener'],
通过系统化的数据库操作实践,ThinkPHP能轻松应对从简单查询到复杂事务的各种场景。掌握这些核心方法后,建议结合具体业务探索关联预加载、查询缓存等进阶特性,进一步提升开发效率。