模型

為了利用 ORM,Mirage 需要了解您應用程式的模型及其關係。本節將教您如何定義和使用模型,下一節將討論關係。

澄清一下,Mirage 模型實例僅存在於 Mirage 的伺服器中,永遠不會直接與您的應用程式共享或直接在元件中呈現。它們的存在只是為了幫助您管理假後端中的資料和關係,但在將資料傳送到您的應用程式之前,它們會被序列化為 JSON 字串。

定義模型

要定義模型,請從 miragejs 匯入 Model 類別,並將其用作 models 設定選項的鍵。

import { createServer, Model } from "miragejs"

createServer({
  models: {
    blogPost: Model,
  },
})

上述設定定義了 Mirage 中的 BlogPost 模型。

建立模型

要建立模型,請透過 schema 物件存取模型的集合。您可以在路由處理器中將 schema 作為第一個參數存取。

this.post("/blog-posts", function (schema) {
  let attrs = this.normalizedRequestAttrs()

  schema.blogPosts.create(attrs)
})

您也可以在您的 Mirage 伺服器實例中,例如在您的預設情境中,將其作為 server.schema 直接存取。

createServer({
  models: {
    blogPost: Model,
  },

  seeds(server) {
    server.schema.blogPosts.create({ title: "Interstellar" })
  },
})

請注意,集合是模型名稱的複數形式(blogPost 模型定義會建立 schema.blogPosts 集合)。

在路由處理器之外,您通常會使用工廠透過 server.create 而不是直接透過 schema 來建立模型。

seeds(server) {
  server.create("blog-post")
}

server.create 的呼叫會在幕後委派給 schema 集合的 create 方法。我們稍後會在這些指南中詳細討論如何使用工廠建立資料。

存取模型

要存取您的模型,請使用模型集合中的各種查詢方法。

例如,使用 all() 來返回所有已知的模型

this.get("/blog-posts", (schema, request) => {
  return schema.blogPosts.all()
})

以下是一些其他常用的查詢方法

schema.blogPosts.find(1)
schema.blogPosts.first()
schema.blogPosts.where({ isPublished: true })
schema.blogPosts.findBy({ title: "Introduction" })

請查閱 Schema API 文件以查看所有可用的查詢方法。

更新和刪除模型

一旦您開始使用模型的實例,您將可以存取其他屬性和方法。

例如,您可以更新模型

let post = schema.blogPosts.find(1)

post.update({ author: "Obi-Wan" })

或刪除模型

let post = schema.blogPosts.find(2)

post.destroy()

請查閱 Model API 文件以查看模型實例的所有可用欄位和方法。


一旦您的模型定義完成,下一步就是定義它們之間的關係,這樣您才能真正開始利用 Mirage ORM 的強大功能。

我們將在接下來討論如何執行此操作。