tsaotai / tsaotai-orm
TsaoTai ORM CRUD Extension for ThinkPHP 8
v2026.1.2
2026-06-03 11:03 UTC
Requires
- php: >=8.0.0
- topthink/framework: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2026-07-03 11:17:50 UTC
README
通用 CRUD 控制器扩展包,基于 ThinkPHP 8 + ThinkORM 开发。直接继承即可获得完整的 CRUD 功能。
目录
安装
composer require tsaotai/tsaotai-orm
快速开始
1. 创建控制器
<?php namespace app\controller\position; use tsaotai\orm\Crud; class Position extends Crud { protected $table = 'tsaotai_position'; protected $requiredFields = ['title', 'series_id']; protected $relations = [ 'series_id' => ['tsaotai_position_series', 'title', 'id'], 'level' => ['tsaotai_position_level', 'title', 'id'], ]; protected function beforeDelete($id) { $count = $this->db->table('tsaotai_position') ->where('parent_id', $id)->count(); return $count == 0 ? true : '存在子级数据'; } protected function applyFilters($query) { if ($seriesId = input('series_id')) { $query->where('series_id', $seriesId); } if ($keyword = input('keyword')) { $query->where('title', 'like', "%{$keyword}%"); } } }
2. 配置路由
use think\facade\Route; Route::resource('position', 'position/Position');
3. 完成!
自动获得以下 API:
| 接口 | 方法 | 功能 |
|---|---|---|
/position |
GET | 分页列表 |
/position/:id |
GET | 获取单条 |
/position |
POST | 新增 |
/position/:id |
PUT | 更新 |
/position/:id |
DELETE | 删除 |
/position/all |
GET | 获取全部 |
/position/relations |
GET | 获取关联数据 |
API 接口
请求示例
GET /position?page=1&limit=20&series_id=xxx
{
"code": 0,
"msg": "success",
"count": 100,
"data": [...]
}
POST /position
{
"title": "高级工程师",
"series_id": "uuid-xxx",
"level": "L3"
}
DELETE /position/uuid-xxx
{
"code": 0,
"msg": "删除成功"
}
配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
$table |
string | 必填 | 数据表名 |
$connection |
string | '' | 数据库连接名 |
$primaryKey |
string | 'id' | 主键字段 |
$softDeleteField |
string | 'delete_time' | 软删除字段 |
$statusField |
string | 'status' | 状态字段 |
$defaultOrder |
string | 'sort desc, create_time desc' | 默认排序 |
$requiredFields |
array | ['title'] | 必填字段 |
$relations |
array | [] | 关联配置 |
钩子方法
| 方法 | 说明 |
|---|---|
applyFilters($query) |
应用查询条件 |
buildWhere() |
构建简单查询条件 |
formatList($list) |
格式化列表数据 |
formatData($data) |
格式化单条数据 |
beforeSave($data) |
保存前处理 |
afterSave($data) |
保存后处理 |
beforeDelete($id) |
删除前检查 |
afterDelete($id) |
删除后处理 |
工具函数
pull - HTTP 请求工具
// 发送 GET 请求 $result = pull('https://api.example.com/users', 'GET', ['page' => 1]); // 发送 POST 请求 $result = pull('https://api.example.com/users', 'POST', [ 'name' => '张三', 'email' => 'zhang@example.com' ]); // 返回格式 // ['code' => 200, 'data' => [...], 'http_code' => 200]
push - 统一响应工具
// 成功响应 return push(0, '操作成功', $data); // 失败响应 return push(404, '资源不存在'); // 返回格式 // { // "success": true, // "code": 0, // "message": "操作成功", // "data": [...], // "timestamp": 1685700000, // "request_id": "uuid-xxx", // "version": "1.0.0" // }
crud_* - CRUD 辅助函数
// 获取列表 $list = crud_list(Position::class, ['status' => 1], 1, 20); // 获取单条 $item = crud_get(Position::class, $id); // 保存数据 $saved = crud_save(Position::class, $data, $id); // 删除数据 $deleted = crud_delete(Position::class, $id); // 获取全部 $all = crud_all(Position::class, ['status' => 1]);
查询条件
基本用法
protected function applyFilters($query) { // 相等条件 $query->where('series_id', input('series_id')); // 模糊查询 $query->where('title', 'like', "%".input('keyword')."%"); // 范围查询 $query->where('create_time', '>=', input('start_time')); // OR 条件 $query->whereOr('level', 'L3'); // IN 查询 $query->where('status', 'in', [1, 2]); }
支持的 ThinkORM 方法
Crud 完全兼容 ThinkORM,支持所有 Query 方法:
| 方法 | 说明 |
|---|---|
where() |
添加查询条件 |
whereOr() |
添加 OR 查询条件 |
whereIn() |
IN 查询 |
whereNotIn() |
NOT IN 查询 |
whereBetween() |
BETWEEN 查询 |
like() |
LIKE 查询 |
order() |
排序 |
limit() |
限制数量 |
page() |
分页 |
join() |
关联查询 |
field() |
字段筛选 |
group() |
分组 |
having() |
分组筛选 |
数据库表结构约定
CREATE TABLE `your_table` ( `id` TEXT PRIMARY KEY, `title` TEXT NOT NULL, `intro` TEXT, `sort` INTEGER DEFAULT 0, `status` INTEGER DEFAULT 1, `create_time` TEXT, `update_time` TEXT, `delete_time` TEXT );
更新日志
查看 CHANGELOG.md
许可证
Apache-2.0 License