iCMS 数据操作指南

iCMS8 数据库操作类使用指南

iCMS8 项目采用了一套完整的 ORM(对象关系映射)系统,主要由以下几个核心组件构成:

核心架构

  1. iPHP\core\Model.php - 模型基类
  2. iPHP\core\database\src\Builder.php - 查询构建器
  3. iPHP\core\database\src\Connection\Connection.php - 数据库连接类
  4. 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'); // 获取某列的值

数据类型转换:
系统支持自动类型转换,如 arrayjsondatetimeboolean 等。

事件系统:
支持 creatingcreatedupdatingupdateddeletedeletedgetedchanged 等事件钩子。

使用示例

参考 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 特性,使用简单且功能强大。