正在加载文档...
iCMS 数据操作指南
iCMS8 数据库操作类使用指南
iCMS8 项目采用了一套完整的 ORM(对象关系映射)系统,主要由以下几个核心组件构成:
核心架构
- iPHP\core\Model.php - 模型基类
- iPHP\core\database\src\Builder.php - 查询构建器
- iPHP\core\database\src\Connection\Connection.php - 数据库连接类
- config\iCMS\database.php - 数据库配置文件
数据库配置
系统支持多种数据库驱动(MySQL、SQLite),配置文件中定义了连接参数:
- MySQL: 主机、端口、数据库名、用户名、密码等
- SQLite: 数据库文件路径
- 表前缀:
icms_
Model 类使用方法
1. 创建模型类
app\article\ArticleModel.php
class ArticleModel extends Model
{
// 数据类型转换
protected $casts = [
'picdata' => 'array',
'nodeAttrs' => 'array',
];
// 事件绑定
protected $events = [
'delete' => ['ArticleEvent', 'delete'],
'changed' => ['ArticleEvent', 'changed'],
];
}
2. 基本查询操作
查询单条记录:
// 根据主键查询
$article = ArticleModel::get(1);
$article = ArticleModel::find(1);
$article = ArticleModel::first();
// 根据条件查询
$article = ArticleModel::where('title', 'test')->first();
$article = ArticleModel::where(['status' => 1])->get();
查询多条记录:
// 查询所有记录
$articles = ArticleModel::select();
$articles = ArticleModel::all();
// 条件查询
$articles = ArticleModel::where('status', 1)->select();
$articles = ArticleModel::where(['cid' => 10])->orderBy('id', 'desc')->select();
3. 复杂查询
WHERE 条件:
// 基本条件
ArticleModel::where('id', 1)
ArticleModel::where('id', '>', 10)
ArticleModel::where(['status' => 1, 'cid' => 10])
// IN 查询
ArticleModel::where('id', [1, 2, 3])
// 原生 SQL
ArticleModel::where('id = ? AND status = ?', [1, 1])
联表查询:
$rows = CrmKolModel::as('kol')
->field('id,name,user_id,avatar')
->leftjoin(CrmUserKolModel::as('uk')->getTableName(), 'uk.user_id=kol.user_id')
->field('uk.created,uk.remark,uk.status')
->where(['uk.uid' => $uid])
->select();
分页查询:
$articles = ArticleModel::where($where)
->orderby('id', 'desc')
->paging($pageSize);
4. 数据操作
创建记录:
// 单条插入
$id = ArticleModel::create([
'title' => '标题',
'content' => '内容',
'status' => 1
]);
// 忽略重复
ArticleModel::ignore($data);
// 替换插入
ArticleModel::replace($data);
更新记录:
// 根据条件更新
ArticleModel::where('id', 1)->update(['title' => '新标题']);
// 更新或创建
ArticleModel::updateOrCreate($data, $where);
删除记录:
// 根据主键删除
ArticleModel::delete(1);
// 根据条件删除
ArticleModel::where('status', 0)->delete();
5. 高级功能
字段选择:
ArticleModel::field('id,title,created')->select();
排序和限制:
ArticleModel::orderBy('id', 'desc')->limit(10)->select();
聚合查询:
$count = ArticleModel::count();
$value = ArticleModel::field('title')->value(); // 获取单个值
$ids = ArticleModel::pluck('id'); // 获取某列的值
数据类型转换:
系统支持自动类型转换,如 array
、json
、datetime
、boolean
等。
事件系统:
支持 creating
、created
、updating
、updated
、delete
、deleted
、geted
、changed
等事件钩子。
使用示例
参考 app\crm\CrmApp.php 中的实际应用:
$rows =CrmKolModel::as('kol')
->field('id,name,user_id,avatar')
->leftjoin(CrmUserKolModel::as('uk')->getTableName(), 'uk.user_id=kol.user_id')
->field('uk.created,uk.remark,uk.status')
->where(['uk.uid' => $uid])
->select();
这套 ORM 系统提供了完整的数据库操作功能,支持链式调用、事件系统、类型转换等现代 ORM 特性,使用简单且功能强大。