"概要" "schema" "changeset" "struct" "map" "總結" 概要 Ecto 中, 對資料庫的操作中經常用到 4 個類型: schema changeset struct map 在 Ecto 的 API 中, 基本都是都是對這 4 個類型的操作, 這 4 個類型的關係 ...
概要
Ecto 中, 對資料庫的操作中經常用到 4 個類型:
- schema
- changeset
- struct
- map
在 Ecto 的 API 中, 基本都是都是對這 4 個類型的操作, 這 4 個類型的關係和互相轉換弄清楚, 有助於更好的使用 Ecto 的 API.
schema
schema 定義了資料庫中表的結構, 包括表欄位名稱, 類型, 以及表之間的關係. Ecto 的 API 中, 對哪張表進行操作, 一般都是通過 schema 來確定的.
通過 schema, 就可以明確 API 的操作對象.
changeset
changeset 主要用於更新數據(包括插入, 更新, 刪除). changeset 詳細記錄了和資料庫的變化有哪些.
使用 Ecto.Changeset 中的 API, 可以將一個 struct 或者 map 轉變為 changeset, 然後就可以更新資料庫中的數據了.
struct
struct 可以理解為實例化的 shema struct 的類型一般都是由 schema 定義的, 也就是 struct 中的欄位都是對應的 schema 中定義的.
struct 也可以像 changeset 那樣, 用於更新資料庫的操作. 但是更多的是用在接收查詢, 或者更新資料庫(insert, update, delete)之後的結果.
map
map 其實就是 elixir 中的 map 類型, 有了 struct, 為什麼還要 map 呢? 因為對外提供介面的時候, 需要序列化數據後再傳輸, 此時, struct 的類型是不重要的, 只要其中的數據就可以了.
總結
簡單來說, 在 Ecto 內部, 只需用到 changeset, struct, schema, 其中, changeset 用來操作具體的資料庫, struct 用於接收資料庫操作(即 增刪改查)的結果, schema 用來定義 struct 的類型.
至於 map, 用來和外部交互數據.