計算字段
在定義虛擬欄位時,」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
這裡amount2在res中定義為乙個複雜的子查詢,其中還用到了t0表,也即是主表」ordr」的固定別名。
可想而知,在這個例子中,取該字段的查詢效率是比較差的。也不要把它用到cond條件中。
[子表字段]
上面ordr與orderitem表是典型的一對多關係,有時希望在返回乙個物件時,同時返回乙個子物件陣列,比如獲取乙個訂單像這樣:
]}
後面章節」子表物件」將介紹其實現方式。但如果子物件相對簡單,且預計記錄數不會特別多,
我們也可以把子表壓縮成乙個字串字段,表中每行以」,」分隔,行中每個欄位以」:」分隔,像這樣返回:
設計介面原型如下,我們用list來描述這種緊湊列表的格式:
ordr.query() -> tbl(..., itemsinfo)
返回- itemsinfo: list(name, price, qty). 格式例如"洗車:25:1,換輪胎:380:2", 表示兩行記錄,每行3個字段。注意字段內容中不可出現":", ","這些分隔符。
子表字段也是一種計算字段,可實現如下:
class
ac1_ordr
extends
accesscontrol
筋斗雲介面程式設計
隨著移動網際網路的快速發展,各行業對手機應用開發需求旺盛。應用開發一般分為前端和後端,後端關注資料和業務,需要對前端各類應用 如安卓應用 蘋果應用 h5應用等 提供基於http協議的互動介面。筋斗雲使用php語言開發的,實現了 分布式物件訪問與許可權控制架構 daca 中的規約,提供的http介面符...
筋斗雲介面程式設計 常用操作(二)
函式應返回符合介面原型中描述的物件,框架會將其轉為最終的json字串。比如登入介面要求返回 因而在api login中,返回結構相符的物件即可 ret id id,isnew 1 return ret 最終返回的json示例 0,如果介面原型中沒有定義返回值,框架會自動返回字串 ok 比如介面api...
筋斗雲介面程式設計 建立Web介面專案
任務 用筋斗雲框架建立乙個web介面專案叫mysvc,建立資料庫,提供對apilog物件的操作介面。git clone mysvc如果github訪問困難,也可以用這個git倉庫 配置好web伺服器,php環境和mysql資料庫。注意php最低版本需要5.4版本,需要開啟mysql,pdo,gd等支...