建構器狀態
最後更新
本頁說明查詢建構器的狀態存放在哪裡,以及這對呼叫方式有什麼限制。
狀態存放在 static 欄位
MySQLPool 沒有實例:table()、where() 等方法修改的是類別上的 static 欄位,並回傳類別本身(typeof MySQLPool)以便串接(src/MySQLPool.ts:20-30)。
| 欄位 | 由誰寫入 |
|---|---|
tableName、currentTarget |
table() |
selectAry |
select() |
joinAry |
innerJoin()、leftJoin()、rightJoin() |
whereAry、bindingAry |
where() |
orderAry |
orderBy() |
queryLimit、queryOffset |
limit()、offset() |
withTotal |
total() |
setAry |
increase()、update() |
每條鏈都從 table() 開始
只有 table() 會呼叫 reset() 清空上述欄位(src/MySQLPool.ts:117-137)。執行 get()/update() 等方法後狀態不會被清空,因此:
await MySQLPool.table("users").where("id", 1).get();
// 錯誤:沿用上一條鏈的 tableName 與 WHERE,等同再查一次 id = 1
await MySQLPool.where("status", "active").get();
// 正確
await MySQLPool.table("users").where("status", "active").get();
currentTarget 也會殘留:在 table("x", "write") 之後直接呼叫 query(sql) 而不帶 target,會走寫入池。