建構器狀態

最後更新

本頁說明查詢建構器的狀態存放在哪裡,以及這對呼叫方式有什麼限制。

狀態存放在 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,會走寫入池。

相關頁面

EN