tsaotai/tsaotai-orm

TsaoTai ORM CRUD Extension for ThinkPHP 8

Maintainers

Package info

github.com/tsaotai/tsaotai-orm

pkg:composer/tsaotai/tsaotai-orm

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2026.1.2 2026-06-03 11:03 UTC

This package is auto-updated.

Last update: 2026-07-03 11:17:50 UTC


README

通用 CRUD 控制器扩展包,基于 ThinkPHP 8 + ThinkORM 开发。直接继承即可获得完整的 CRUD 功能。

Version License

目录

安装

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