模型

为了利用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功能。

我们将在下一节讨论如何做到这一点。