Skip to content
导航栏

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。

示例:

js
const id = Process('models.category.create', {
  parent_id: 1,
  name: '英语',
});
return id;

Insert

一次性插入多条数据记录,返回插入行数。如果单纯是插入数据,方法 Insert 会比 EachSave 快。

处理器:models.模型名称.Insert

  • 参数 1:字段清单集合,一维数组。
  • 参数 2:数据记录集合,二维数组。

返回插入行数。

示例:

javascript
function Insert() {
  return Process(
    'models.category.insert',
    ['parent_id', 'name'],
    [
      [1, '语文'],
      [1, '地理'],
    ],
  );
}

通常需要配合处理器utils.arr.split进行处理。

js
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

示例:

javascript
function Update() {
  return Process('models.category.update', 9, {
    parent_id: 1,
    name: '英语',
  });
}

UpdateWhere

根据条件更新数据记录, 返回更新行数。

处理器:models.模型名称.UpdateWhere

  • 参数 1:查询条件。
  • 参数 2:数据记录。

返回更新行数。

示例:

javascript
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。

示例:

javascript
function Save() {
  return Process('models.category.save', {
    parent_id: 1,
    name: '语文',
  });
}

EachSave

批量创建或是更新多条记录, 不包含主键字段则创建记录, 存在更新记录。

处理器:models.模型名称.EachSave

  • 参数 1:必填项,待保存数据记录集合。
  • 参数 2:可选项,共有字段,写入时合并到到每条数据记录;若字段数值为 $index 将替换为数据记录集合的 index。

返回创建或更新的记录 ID 集合。

示例:

js
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 集合。

示例:

js
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

示例:

javascript
function deletes() {
  return Process('models.category.delete', 10);
}

DeleteWhere

根据条件删除数据。

如模型定义时未开启 soft_deletes 则真删除数据记录。

处理器:models.模型名称.DeleteWhere

  • 参数 1:查询条件, 示例:{"wheres":[{"column":"name", "value":"张三"}]}

返回删除行数。

javascript
function Deletewhere() {
  return Process('models.category.deletewhere', {
    wheres: [{ column: 'parent_id', value: 4 }],
  });
}

Destroy

根据主键 id 真删除单条数据记录。

处理器:models.模型名称.Destroy

  • 参数 1:模型主键 id。

成功返回null

示例:

javascript
function Destroy() {
  return Process('models.category.destroy', 9);
}

DestroyWhere

根据条件真删除数据。

处理器:models.模型名称.DestroyWhere

  • 参数 1:查询条件,示例:{"wheres":[{"column":"name", "value":"张三"}]}

返回删除行数。

示例:

javascript
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 有会异常。

示例:

javascript
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 有会异常。

示例:

javascript
function Get() {
  return Process('models.category.get', {
    wheres: [{ column: 'parent_id', value: null }],
  });
}

这个处理器返回的结果类型是数组,所以只搜索每一条数据时可以这样使用

js
//直接返回[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 数据结构

字段类型说明
dataArray<Object Row>数据记录集合
nextInteger下一页,如没有下一页返回 -1
prevInteger上一页,如没有上一页返回 -1
pageInteger当前页码
pagesizeInteger每页记录数量
pagecntInteger总页数
totalInteger总记录数

示例:

javascript
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,
  );
}