筋斗云接口编程 / 虚拟表和视图

2024-01-07 13:08

本文主要是介绍筋斗云接口编程 / 虚拟表和视图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

虚拟表和视图

表ApiLog中有一个字段叫app,表示前端应用名:

@ApiLog: id, tm, addr, app, userId- userId: 如果app=user,则关联到User表;如果app=emp,则关联到员工表Employee@Employee: id, name, phone, ...
@User: id, ...

当app=”emp”时,就表示是员工端应用的操作日志。
现在想对员工端操作日志进行查询,定义以下接口:

EmpLog.query() -> tbl(id, tm, userId, ac, ..., empName?, empPhone?)返回
- empName/empPhone: 关联字段,通过userId关联到Employee表的name/phone字段。应用逻辑
- 权限:AUTH_EMP

EmpLog是一个虚拟对象或虚拟表,实现时,一种办法是可以在数据库定义一个视图,如:

CREATE VIEW EmpLog AS
SELECT t0.id, tm, userId, ac, e.name empName, e.phone empPhone
FROM ApiLog t0
LEFT JOIN Employee e ON e.id=t0.userId
WHERE t0.app='emp' AND t0.userId IS NOT NULL
ORDER BY t0.id DESC

然后可将该视图当作表一样查询(但不可更新),如:

class AC2_EmpLog extends AccessControl 
{protected $allowedAc = ["query"];
}

这样就可以实现上述接口了。

另一种办法是直接使用AccessControl创建虚拟表,代码如下:

class AC2_EmpLog extends AccessControl 
{protected $allowedAc = ["query"];protected $table = 'ApiLog';protected $defaultSort = "t0.id DESC";protected $defaultRes = "id, tm, userId, ac, req, res, reqsz, ressz, empName, empPhone";protected $vcolDefs = [["res" => ["e.name AS empName", "e.phone AS empPhone"],"join" => "LEFT JOIN Employee e ON e.id=t0.userId"]];// get/query操作都会走这里protected function onQuery() {$this->addCond("t0.app='emp' and t0.userId IS NOT NULL");}
}

与上例相比,它不仅无须在数据库中创建视图,还也可以进行更新。
其要点是:

  • 重写$table属性, 定义实际表
  • 用属性$vcolDefs定义虚拟字段
  • 用addCond方法添加缺省查询条件

属性$defaultSort$defaultRes可用于定义缺省返回字段及排序方式。

在get/query接口中可以用”res”指定返回字段,如果未指定,则会返回除了$hiddenFields定义的字段之外,所有主表中的字段,还会包括设置了default=>true的虚拟字段。
通过$defaultRes可以指定缺省返回字段列表。

query接口中可以通过”orderby”来指定排序方式,如果未指定,默认是按id排序的,通过$defaultSort可以修改默认排序方式。

这篇关于筋斗云接口编程 / 虚拟表和视图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580020

相关文章

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re