Yao 模型处理器列表
参考:模型相关的处理器
备注:<ID>
为 Model Widget ID
处理器 | 参数表 | 返回值 | 说明 |
---|---|---|---|
models.<ID>.Find | <主键值>,<查询条件> | 单条记录 | 查询单条记录 示例 |
models.<ID>.Get | <主键值>,<查询条件> | 记录数组 | 根据条件查询, 不分页 示例 |
models.<ID>.Paginate | <查询条件>,<当前页码>, <每页显示记录数> | 分页信息和记录数组 | 根据条件查询, 分页 示例 |
models.<ID>.Create | <记录> | 新记录主键值 | 创建单条记录, 返回新创建记录 ID 示例 |
models.<ID>.Update | <主键值>,<记录> | null | 更新单条记录 示例 |
models.<ID>.Save | <记录> | 记录主键值 | 保存单条记录, 不存在创建记录, 存在更新记录, 返回记录 ID 示例 |
models.<ID>.Delete | <主键值> | null | 删除单条记录(标记删除) 示例 |
models.<ID>.Destroy | <主键值> | null | 删除单条记录(真删除) 示例 |
models.<ID>.Insert | <字段名称数组>, <二维记录值数组> | 成功插入行数 | 插入多条记录, 返回插入行数 示例 |
models.<ID>.UpdateWhere | <查询条件>,<记录> | 成功更新行数 | 根据条件更新记录, 返回更新行数 示例 |
models.<ID>.DeleteWhere | <查询条件> | 成功删除行数 | 根据条件删除数据, 返回删除行数(标记删除) 示例 |
models.<ID>.DestroyWhere | <查询条件> | 成功删除行数 | 根据条件删除数据, 返回删除行数(真删除) 示例 |
models.<ID>.EachSave | <记录数组>, <记录(共有字段)> | 创建或更新的记录主键值数组 | 保存多条记录, 不存在创建记录, 存在更新记录, 返回记录 ID 集合 示例 |
models.<ID>.EachSaveAfterDelete | <主键值数组>,<记录数组>, <记录(共有字段)> | 创建或更新的记录主键值数组 | 删除一组给定 ID 的记录后,保存多条记录, 不存在创建, 存在更新, 返回 ID 集合 示例 |
创建数据
Create
创建单条记录, 返回新创建记录的主键。
处理器:models.模型名称.Create
。
- 参数 1:数据记录,示例:
{"name": "用户创建","manu_id": 2,"type": "user"}
返回新创建的记录 ID。
示例:
const id = Process('models.category.create', {
parent_id: 1,
name: '英语',
});
return id;
Insert
一次性插入多条数据记录,返回插入行数。如果单纯是插入数据,方法 Insert 会比 EachSave 快。
处理器:models.模型名称.Insert
。
- 参数 1:字段清单集合,一维数组。
- 参数 2:数据记录集合,二维数组。
返回插入行数。
示例:
function Insert() {
return Process(
'models.category.insert',
['parent_id', 'name'],
[
[1, '语文'],
[1, '地理'],
],
);
}
通常需要配合处理器utils.arr.split
进行处理。
const data = [
{ parent_id: 1, name: '语文' },
{ parent_id: 1, name: '地理' },
];
// 把对象数组拆分为列数组与值数组
const { columns, values } = Process('utils.arr.split', data);
return Process('models.category.insert', columns, values);
更新数据
Update
根据主键 id 更新单条数据记录。
处理器:models.模型名称.Update
。
- 参数 1:模型主键 id。
- 参数 2:数据记录, 示例:
{"balance": 200}
。
成功返回null
。
示例:
function Update() {
return Process('models.category.update', 9, {
parent_id: 1,
name: '英语',
});
}
UpdateWhere
根据条件更新数据记录, 返回更新行数。
处理器:models.模型名称.UpdateWhere
。
- 参数 1:查询条件。
- 参数 2:数据记录。
返回更新行数。
示例:
function UpdateWhere() {
return Process(
'models.category.updatewhere',
{
wheres: [{ column: 'parent_id', value: 1 }],
},
{
name: '数学',
},
);
}
Save
创建或更新单条记录。如数据记录中包含 id 则更新,不包含 id 则创建记录;返回创建或更新的记录 ID。
处理器:models.模型名称.Save
。
- 参数 1:数据记录,示例:
{"name": "用户创建","manu_id": 2,"type": "user"}
。
返回创建或更新的记录 ID。
示例:
function Save() {
return Process('models.category.save', {
parent_id: 1,
name: '语文',
});
}
EachSave
批量创建或是更新多条记录, 不包含主键字段则创建记录, 存在更新记录。
处理器:models.模型名称.EachSave
。
- 参数 1:必填项,待保存数据记录集合。
- 参数 2:可选项,共有字段,写入时合并到到每条数据记录;若字段数值为
$index
将替换为数据记录集合的 index。
返回创建或更新的记录 ID 集合。
示例:
const ids = Process(
'models.user.EachSave',
[{ id: 101, name: '张三' }, { name: '李四' }],
{ manu_id: 2, balance: '$index' },
);
//[101, 107]
return ids;
注:每次保存都会调用一次数据库操作。
EachSaveAfterDelete
删除并保存数据,删除给定 ID 的记录后,保存多条记录数据, 不包含主键字段则创建记录, 存在更新记录, 返回记录 ID 集合 ,返回创建或更新的记录 ID 集合。
处理器:models.模型名称.EachSaveAfterDelete
。
- 参数 1:必填项,删除的记录 ID 集合。
- 参数 2:必填项,待保存数据记录集合。
- 参数 3:可选项,共有字段,写入时合并到到每条数据记录;若字段数值为
$index
将替换为数据记录集合的 index。
返回创建或更新的记录 ID 集合。
示例:
const ids = Process(
'models.user.EachSaveAfterDelete',
[1, 2, 3],
[{ id: 101, name: '张三' }, { name: '李四' }],
{ manu_id: 2, balance: '$index' },
);
//[101, 107]
return ids;
删除数据
Delete
根据 id 删除数据,如模型定义时未开启 soft_deletes
则真删除数据记录。
处理器:models.模型名称.Delete
。
- 参数 1:数据记录 id。
成功返回null
。
示例:
function deletes() {
return Process('models.category.delete', 10);
}
DeleteWhere
根据条件删除数据。
如模型定义时未开启 soft_deletes
则真删除数据记录。
处理器:models.模型名称.DeleteWhere
。
- 参数 1:查询条件, 示例:
{"wheres":[{"column":"name", "value":"张三"}]}
。
返回删除行数。
function Deletewhere() {
return Process('models.category.deletewhere', {
wheres: [{ column: 'parent_id', value: 4 }],
});
}
Destroy
根据主键 id 真删除单条数据记录。
处理器:models.模型名称.Destroy
。
- 参数 1:模型主键 id。
成功返回null
。
示例:
function Destroy() {
return Process('models.category.destroy', 9);
}
DestroyWhere
根据条件真删除数据。
处理器:models.模型名称.DestroyWhere
。
- 参数 1:查询条件,示例:
{"wheres":[{"column":"name", "value":"张三"}]}
。
返回删除行数。
示例:
function Destroywhere() {
return Process('models.category.destroywhere', {
wheres: [{ column: 'parent_id', value: 4 }],
});
}
查找数据
find
根据主键 id 查询单条记录。
处理器:models.模型名称.Find
。
- 参数 1:模型主键。
- 参数 2:查询条件, 仅
withs
有效。
返回数据记录对象。
AES 字段自动解密。 关联模型作为一个独立字段,字段名称为关联关系名称; hasOne 关联为数据记录 Object , hasMany 关联为数据记录数组 Array<Object>,如果存在多个 hasMany 有会异常。
示例:
function Find() {
return Process('models.user.find', 1, {
withs: { manu: {}, mother: {}, addresses: {} },
});
}
get
根据条件查询数据记录, 返回符合条件的结果集。相关于 SQL 中的 select,使用比较频繁的处理器。
处理器:models.模型名称.Get
。
- 参数 1,查询条件, 示例:
{"wheres":[{"column":"name", "value":"张三"}],"withs":{"manu":{}}}
,查询条件使用是 QueryParam 结构。
返回符合条件的的数据记录(Key-Value 结构 Object)集合。AES 字段自动解密。 关联模型作为一个独立字段,字段名称为关联关系名称; hasOne 关联为数据记录 Object , hasMany 关联为数据记录数组 Array<Object>。
需要注意:如果存在多个 hasMany 有会异常。
示例:
function Get() {
return Process('models.category.get', {
wheres: [{ column: 'parent_id', value: null }],
});
}
这个处理器返回的结果类型是数组,所以只搜索每一条数据时可以这样使用
//直接返回[0],而不会报错
return Process('models.ai.setting.Get', {
wheres: [
{
Column: 'default',
Value: true,
},
{
Column: 'deleted_at',
Value: null,
},
],
})[0];
//使用解构的方法
const [user] = Process('models.admin.user.get', {
wheres: [
{ column: 'mobile', value: account },
{ column: 'status', value: '启用' },
{ method: 'orwhere', column: 'email', value: account },
],
limit: 1,
});
Paginate
根据条件查询数据记录, 返回带有分页信息的数据对象。
处理器:models.模型名称.Paginate
。
- 参数 1:查询条件。
- 参数 2:当前页码。
- 参数 3:每页记录数量。
返回带有分页信息的数据对象,Object Paginate 数据结构:
字段 | 类型 | 说明 |
---|---|---|
data | Array<Object Row> | 数据记录集合 |
next | Integer | 下一页,如没有下一页返回 -1 |
prev | Integer | 上一页,如没有上一页返回 -1 |
page | Integer | 当前页码 |
pagesize | Integer | 每页记录数量 |
pagecnt | Integer | 总页数 |
total | Integer | 总记录数 |
示例:
function Paginate() {
return Process(
'models.user.Paginate',
{
select: ['id', 'name', 'mobile', 'status', 'extra'],
withs: { manu: {}, mother: {}, addresses: {} },
wheres: [{ column: 'status', value: 'enabled' }],
limit: 2,
},
1,
2,
);
}