筋斗云接口编程 / 虚拟字段(二)

计算字段

在定义虚拟字段时,”res”也可以是一个计算值,或一个很复杂的子查询。

例如表OrderItem是Ordr对象的一个子表,表示订单中每一项产品的名称、数量、价格:

@Ordr: id, userId, status(2), amount, dscr(l)
@OrderItem: id, orderId, name, qty, price

一个订单对应多个产品项:
OrderItem(orderId) n<->1 Ordr

在添加订单时,同时将每个产品的数量、单价添加到OrderItem表中了。
订单中有一个amount字段表示金额,由于可能存在折扣或优惠,它不一定等于OrderItem中每个产品价格之和。
现在希望增加一个amount2字段,它表示原价,根据OrderItem中每个产品价格累加得到,接口设计如下:

Ordr.query() -> tbl(..., amount2)

返回
- amount2: 订单原价。

仍然用vcolDefs定义一个虚拟字段,可以直接用一个SQL查询得到amount2字段:

class AC1_Ordr extends AccessControl
{
    protected $vcolDefs = [
        [
            "res" => ["(SELECT SUM(qty*ifnull(price2,0)) FROM OrderItem WHERE orderId=t0.id) AS amount2"],
        ]
    ];
}

这里amount2在res中定义为一个复杂的子查询,其中还用到了t0表,也即是主表”Ordr”的固定别名。
可想而知,在这个例子中,取该字段的查询效率是比较差的。也不要把它用到cond条件中。

[子表字段]

上面Ordr与OrderItem表是典型的一对多关系,有时希望在返回一个对象时,同时返回一个子对象数组,比如获取一个订单像这样:

{ id: 1, dscr: "换轮胎及洗车", ..., orderItem: [
    {id: 1, name: "洗车", price: 25, qty: 1}
    {id: 2, name: "换轮胎", price: 380, qty: 2}
]}

后面章节”子表对象”将介绍其实现方式。但如果子对象相对简单,且预计记录数不会特别多,
我们也可以把子表压缩成一个字符串字段,表中每行以”,”分隔,行中每个字段以”:”分隔,像这样返回:

{ id: 1, dscr: "换轮胎及洗车", ..., itemsInfo: "洗车:25:1,换轮胎:380:2"}

设计接口原型如下,我们用List来描述这种紧凑列表的格式:

Ordr.query() -> tbl(..., itemsInfo)

返回
- itemsInfo: List(name, price, qty). 格式例如"洗车:25:1,换轮胎:380:2", 表示两行记录,每行3个字段。注意字段内容中不可出现":", ","这些分隔符。

子表字段也是一种计算字段,可实现如下:

class AC1_Ordr extends AccessControl
{
    protected $vcolDefs = [
        [
            "res" => ["(SELECT group_concat(concat(oi.name, ':', oi.price, ':', oi.qty)) FROM OrderItem oi WHERE oi.orderId=t0.id) itemsInfo"] 
        ],
        ...
    ]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能描述 筋斗云在线测评系统,主要包括:试题展示、用户管理、成绩查询、历史记录、试题管理、智能组卷、智能分析。  电子商务系统功能描述 试题展示:实现试题的选择、展示和提交。 用户管理:实现用户的注册、登录、修改密码和修改个人信息。 成绩查询:实现成绩查询,错题解析和成绩分析报告。 历史记录:实现对历史测评的查询和回顾,对错题智能提示。 试题管理:实现动态向数据库增加、删除、修改和查询试题功能。 智能组卷:实现根据制定条件自动选题,可以动态更改试题。 智能分析:实现对用户的答题记录,智能分析错题,显示分析报告。 本系统采用SSM框架,使用了redis技术,双服务器;’ 本系统页面设计精美,特效很多; 本测评系统实现了多角色多用户的切换,实现了试卷的创建,智能组卷,无聊刷题,考试情况的分析统计等功能,分为前台后台两部分。 通过设置tomcat,修改数据库配置文件后即可使用, 本系统包括测评系统主程序源代码,数据库文件,需求文档,数据库设计包含在需求文档中,十分详细, 囊括了功能结构图,用例图,业务流程图,ER结构图,清晰明了,足以满足您在技术上的需求或者直接进行使用,您可以在参考原项目的基础上进行修改,或者直接录入数据信息进行使用。 本系统属于原创代码,如您需要在其他位置进行发表,请注明出处。谢谢使用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值