The Ember Data store provides an interface for retrieving records of a single type.
Retrieving a Single Record
Use store.findRecord()
to retrieve a record by its type and ID. This will
return a promise that fulfills with the requested record:
var post = this.store.findRecord('post', 1); // => GET /posts/1
Use store.peekRecord()
to retrieve a record by its type and ID, without making
a network request. This will return the record only if it is already present in
the store:
var post = this.store.peekRecord('post', 1); // => no network request
Retrieving Multiple Records
Use store.findAll()
to retrieve all of the records for a given type:
var posts = this.store.findAll('post'); // => GET /posts
Use store.peekAll()
to retrieve all of the records for a given type that are
already loaded into the store, without making a network request:
var posts = this.store.peekAll('post'); // => no network request
store.findAll()
returns a DS.PromiseArray
that fulfills to a
DS.RecordArray
and store.peekAll
directly returns a DS.RecordArray
.
It's important to note that DS.RecordArray
is not a JavaScript array. It is
an object that implements Ember.Enumerable
. This is important because,
for example, if you want to retrieve records by index, the []
notation will
not work--you'll have to use objectAt(index)
instead.
Querying for Multiple Records
Ember Data provides the ability to query for records that meet certain criteria. Calling store.query()
will make a GET
request with the passed object serialized as query params. This method returns
DS.PromiseArray
in the same way as find
.
For example, we could search for all person
models who have the name of
Peter
:
// GET to /persons?filter[name]=Peter
this.store.query('person', { filter: { name: 'Peter' } }).then(function(peters) {
// Do something with `peters`
});
Querying for A Single Record
If you know your query will return only one result Ember Data provides
a convenience method that will return a promise that resolves with a
single record. Calling store.queryRecord()
will make a GET
request
with the passed object serialized as query params.
For example, if we know that an email uniquely identifies a person, we could search for a person
model that has an email address of
tomster@example.com
:
// GET to /persons?filter[email]=tomster@example.com
this.store.queryRecord('person', { filter: { email: 'tomster@example.com' } }).then(function(tomster) {
// do something with `tomster`
});