Schema
The primary use of the Schema
class is to use it to find Models and Collections via the Model
class methods.
The Schema
is most often accessed via the first parameter to a route handler:
this.get('posts', schema => {
return schema.posts.where({ isAdmin: false });
});
It is also available from the .schema
property of a server
instance:
server.schema.users.create({ name: 'Yehuda' });
To work with the Model or Collection returned from one of the methods below, refer to the instance methods in the API docs for the Model
and Collection
classes.
Properties
db: Object
Returns Mirage's database. See the Db
docs for the db's API.
Methods
all(type: any): any
Return all models in the database.
let posts = blogPosts.all();
// [post:1, post:2, ...]
associationsFor(modelName: String): Object
Returns an object containing the associations registered for the model of the given modelName.
For example, given this configuration
import { Server, Model, hasMany, belongsTo } from 'miragejs'
let server = new Server({
models: {
user: Model,
article: Model.extend({
fineAuthor: belongsTo("user"),
comments: hasMany()
}),
comment: Model
}
})
each of the following would return empty objects
server.schema.associationsFor('user')
// {}
server.schema.associationsFor('comment')
// {}
but the associations for the article
would return
server.schema.associationsFor('article')
// {
// fineAuthor: BelongsToAssociation,
// comments: HasManyAssociation
// }
Check out the docs on the Association class to see what fields are available for each association.
create(type: any, attrs: any): any
Create a new model instance with attributes attrs, and insert it into the database.
let post = blogPosts.create({title: 'Lorem ipsum'});
post.title; // Lorem ipsum
post.id; // 1
post.isNew(); // false
find(type: any, ids: any): any
Return one or many models in the database by id.
let post = blogPosts.find(1);
let posts = blogPosts.find([1, 3, 4]);
findBy(type: any, attributeName: any): any
Returns the first model in the database that matches the key-value pairs in attrs
. Note that a string comparison is used.
let post = blogPosts.findBy({ published: true });
let post = blogPosts.findBy({ authorId: 1, published: false });
let post = blogPosts.findBy({ author: janeSmith, featured: true });
This will return null
if the schema doesn't have any matching record.
findOrCreateBy(type: any, attributeName: any): any
Returns the first model in the database that matches the key-value pairs in attrs
, or creates a record with the attributes if one is not found.
// Find the first published blog post, or create a new one.
let post = blogPosts.findOrCreateBy({ published: true });
first(type: any): any
Returns the first model in the database.
let post = blogPosts.first();
N.B. This will return null
if the schema doesn't contain any records.
new(type: any, attrs: any): any
Create a new unsaved model instance with attributes attrs.
let post = blogPosts.new({ title: 'Lorem ipsum' });
post.title; // Lorem ipsum
post.id; // null
post.isNew(); // true
none(type: any): any
Return an empty collection of type type
.
where(type: any, query: any): any
Return an ORM/Collection, which represents an array of models from the database matching query
.
If query
is an object, its key-value pairs will be compared against records using string comparison.
query
can also be a compare function.
let posts = blogPosts.where({ published: true });
let posts = blogPosts.where(post => post.published === true);