モデル
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の真の力を活用できるようになります。
次のセクションで、その方法について説明します。