hasMany (type, options) Ember.computed
DS.hasMany
is used to define One-To-Many and Many-To-Many relationships on a DS.Model.
DS.hasMany
takes an optional hash as a second parameter, currently supported options are:
-
async
: A boolean value used to explicitly declare this to be an async relationship. -
inverse
: A string used to identify the inverse property on a related model.
One-To-Many
To declare a one-to-many relationship between two models, use DS.belongsTo
in combination with DS.hasMany
, like this:
app/models/post.js
import DS from 'ember-data'; export default DS.Model.extend({ comments: DS.hasMany('comment') });
app/models/comment.js
import DS from 'ember-data'; export default DS.Model.extend({ post: DS.belongsTo('post') });
Many-To-Many
To declare a many-to-many relationship between two models, use DS.hasMany
:
app/models/post.js
import DS from 'ember-data'; export default DS.Model.extend({ tags: DS.hasMany('tag') });
app/models/tag.js
import DS from 'ember-data'; export default DS.Model.extend({ posts: DS.hasMany('post') });
You can avoid passing a string as the first parameter. In that case Ember Data will infer the type from the singularized key name.
app/models/post.js
import DS from 'ember-data'; export default DS.Model.extend({ tags: DS.hasMany() });
will lookup for a Tag type.
Explicit Inverses
Ember Data will do its best to discover which relationships map to one another. In the one-to-many code above, for example, Ember Data can figure out that changing the comments
relationship should update the post
relationship on the inverse because post is the only relationship to that model.
However, sometimes you may have multiple belongsTo
/hasManys
for the same type. You can specify which property on the related model is the inverse using DS.hasMany
's inverse
option:
app/models/comment.js
import DS from 'ember-data'; export default DS.Model.extend({ onePost: DS.belongsTo('post'), twoPost: DS.belongsTo('post'), redPost: DS.belongsTo('post'), bluePost: DS.belongsTo('post') });
app/models/post.js
import DS from 'ember-data'; export default DS.Model.extend({ comments: DS.hasMany('comment', { inverse: 'redPost' }) });
You can also specify an inverse on a belongsTo
, which works how you'd expect.
Parameters:
-
type
String
- (optional) type of the relationship
-
options
Object
- (optional) a hash of options
Returns:
-
Ember.computed
- relationship
Please login to continue.