モデル

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` コレクションを作成します)の複数形であることに注意してください。

ルートハンドラ以外では、通常、`schema` を直接使用するのではなく、`server.create` を介してファクトリを使用してモデルを作成します。

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" })

使用可能なすべてのクエリメソッドについては、スキーマAPIドキュメントを参照してください。

モデルの更新と削除

モデルのインスタンスを操作する際には、他にもアクセスできるプロパティやメソッドがあります。

たとえば、モデルを更新できます。

let post = schema.blogPosts.find(1)

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

または、削除できます。

let post = schema.blogPosts.find(2)

post.destroy()

モデルインスタンスで使用可能なすべてのフィールドとメソッドについては、モデルAPIドキュメントを参照してください。


モデルを定義したら、次はモデル間の関係を定義します。これにより、MirageのORMの真の力を活用できるようになります。

次のセクションで、その方法について説明します。