Skip to content

Commit fc4db08

Browse files
committed
fix: v5.0 ember-data deprecates non-strict relationships
- As per [ember-data:deprecate-non-strict-relationships](https://deprecations.emberjs.com/ember-data/v4.x/#toc_ember-data-deprecate-non-strict-relationships) we should update the guides to list all relationships explicitly. - Supports ember-learn#1988
1 parent b974634 commit fc4db08

File tree

4 files changed

+29
-44
lines changed

4 files changed

+29
-44
lines changed

guides/v5.0.0/models/customizing-serializers.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ have a model with a `hasMany` relationship:
365365
import Model, { hasMany } from '@ember-data/model';
366366

367367
export default class PostModel extends Model {
368-
@hasMany('comment', { async: true }) comments;
368+
@hasMany('comment', { async: true, inverse: 'originalPost' }) comments;
369369
}
370370
```
371371

@@ -401,7 +401,7 @@ a model:
401401
import Model, { belongsTo } from '@ember-data/model';
402402

403403
export default class CommentModel extends Model {
404-
@belongsTo('post') originalPost
404+
@belongsTo('post', { async: false, inverse: 'comments' }) originalPost
405405
}
406406
```
407407

@@ -713,8 +713,8 @@ import Model, { attr, hasMany } from '@ember-data/model';
713713
export default class Post extends Model {
714714
@attr('string') title;
715715
@attr('string') tag;
716-
@hasMany('comment', { async: false }) comments;
717-
@hasMany('post') relatedPosts;
716+
@hasMany('comment', { async: false, inverse: 'post' }) comments;
717+
@hasMany('post', { async: false, inverse: 'relatedPosts' }) relatedPosts;
718718
}
719719
```
720720

guides/v5.0.0/models/index.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -238,15 +238,15 @@ example, an `order` may have many `line-items`, and a
238238
import Model, { hasMany } from "@ember-data/model";
239239

240240
export default class OrderModel extends Model {
241-
@hasMany("line-item") lineItems;
241+
@hasMany("line-item", { async: false, inverse: 'order' }) lineItems;
242242
}
243243
```
244244

245245
```javascript {data-filename=app/models/line-item.js}
246246
import Model, { belongsTo } from "@ember-data/model";
247247

248248
export default class LineItemModel extends Model {
249-
@belongsTo("order") order;
249+
@belongsTo("order", { async: false, inverse: 'lineItems' }) order;
250250
}
251251
```
252252

guides/v5.0.0/models/relationships.md

+22-37
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ To declare a one-to-one relationship between two models, use
1010
import Model, { belongsTo } from '@ember-data/model';
1111

1212
export default class UserModel extends Model {
13-
@belongsTo('profile') profile;
13+
@belongsTo('profile', { async: true, inverse: 'user' }) profile;
1414
}
1515
```
1616

1717
```javascript {data-filename=app/models/profile.js}
1818
import Model, { belongsTo } from '@ember-data/model';
1919

2020
export default class ProfileModel extends Model {
21-
@belongsTo('user') user;
21+
@belongsTo('user', { async: true, inverse: 'profile' }) user;
2222
}
2323
```
2424

@@ -31,15 +31,15 @@ To declare a one-to-many relationship between two models, use
3131
import Model, { hasMany } from '@ember-data/model';
3232

3333
export default class BlogPostModel extends Model {
34-
@hasMany('comment') comments;
34+
@hasMany('comment', { async: true, inverse: 'blogPost' }) comments;
3535
}
3636
```
3737

3838
```javascript {data-filename=app/models/comment.js}
3939
import Model, { belongsTo } from '@ember-data/model';
4040

4141
export default class CommentModel extends Model {
42-
@belongsTo('blog-post') blogPost;
42+
@belongsTo('blog-post', { async: true, inverse: 'comments' }) blogPost;
4343
}
4444
```
4545

@@ -52,68 +52,53 @@ To declare a many-to-many relationship between two models, use
5252
import Model, { hasMany } from '@ember-data/model';
5353

5454
export default class BlogPostModel extends Model {
55-
@hasMany('tag') tags;
55+
@hasMany('tag', { async: true, inverse: 'blogPosts' }) tags;
5656
}
5757
```
5858

5959
```javascript {data-filename=app/models/tag.js}
6060
import Model, { hasMany } from '@ember-data/model';
6161

6262
export default class TagModel extends Model {
63-
@hasMany('blog-post') blogPosts;
63+
@hasMany('blog-post', { async: true, inverse: 'tags' }) blogPosts;
6464
}
6565
```
6666

67-
### Explicit Inverses
67+
### No Inverse Relations
6868

69-
EmberData will do its best to discover which relationships map to one
70-
another. In the one-to-many code above, for example, EmberData can figure out that
71-
changing the `comments` relationship should update the `blogPost`
72-
relationship on the inverse because `blogPost` is the only relationship to
73-
that model.
74-
75-
However, sometimes you may have multiple `belongsTo`/`hasMany`s for
76-
the same type. You can specify which property on the related model is
77-
the inverse using `belongsTo` or `hasMany`'s `inverse`
78-
option. Relationships without an inverse can be indicated as such by
79-
including `{ inverse: null }`.
69+
If an inverse relationship exists and you wish changes on one side
70+
to reflect onto the other side, use the inverse key.
71+
If you wish to not have changes reflected or
72+
no inverse relationship exists, specify `{inverse: null }`.
8073

8174
```javascript {data-filename=app/models/comment.js}
8275
import Model, { belongsTo } from '@ember-data/model';
8376

8477
export default class CommentModel extends Model {
85-
@belongsTo('blog-post', { inverse: null }) onePost;
86-
@belongsTo('blog-post') twoPost;
87-
@belongsTo('blog-post') redPost;
88-
@belongsTo('blog-post') bluePost;
78+
@belongsTo('blog-post', { async: true, inverse: null }) blogPost;
8979
}
9080
```
9181

9282
```javascript {data-filename=app/models/blog-post.js}
9383
import Model, { hasMany } from '@ember-data/model';
9484

9585
export default class BlogPostModel extends Model {
96-
@hasMany('comment', {
97-
inverse: 'redPost'
98-
})
99-
comments;
10086
}
10187
```
10288

10389
### Reflexive Relations
10490

105-
When you want to define a reflexive relation (a model that has a relationship to
106-
itself), you must explicitly define the inverse relationship. If there
107-
is no inverse relationship then you can set the inverse to `null`.
91+
If you want to define a reflexive relation (a model that has a relationship to
92+
itself), you can do it via specifying `inverse`.
10893

10994
Here's an example of a one-to-many reflexive relationship:
11095

11196
```javascript {data-filename=app/models/folder.js}
11297
import Model, { belongsTo, hasMany } from '@ember-data/model';
11398

11499
export default class FolderModel extends Model {
115-
@hasMany('folder', { inverse: 'parent' }) children;
116-
@belongsTo('folder', { inverse: 'children' }) parent;
100+
@hasMany('folder', { async: true, inverse: 'parent' }) children;
101+
@belongsTo('folder', { async: true, inverse: 'children' }) parent;
117102
}
118103
```
119104

@@ -124,7 +109,7 @@ import Model, { attr, belongsTo } from '@ember-data/model';
124109

125110
export default class UserModel extends Model {
126111
@attr('string') name;
127-
@belongsTo('user', { inverse: 'bestFriend' }) bestFriend;
112+
@belongsTo('user', { async: true, inverse: 'bestFriend' }) bestFriend;
128113
}
129114
```
130115

@@ -134,7 +119,7 @@ You can also define a reflexive relationship that doesn't have an inverse:
134119
import Model, { belongsTo } from '@ember-data/model';
135120

136121
export default class FolderModel extends Model {
137-
@belongsTo('folder', { inverse: null }) parent;
122+
@belongsTo('folder', { async: true, inverse: null }) parent;
138123
}
139124
```
140125

@@ -156,15 +141,15 @@ First, let's look at the model definitions:
156141
import Model, { hasMany } from '@ember-data/model';
157142

158143
export default class UserModel extends Model {
159-
@hasMany('payment-method', { polymorphic: true }) paymentMethods;
144+
@hasMany('payment-method', { async: true, inverse: 'user', polymorphic: true }) paymentMethods;
160145
}
161146
```
162147

163148
```javascript {data-filename=app/models/payment-method.js}
164149
import Model, { belongsTo } from '@ember-data/model';
165150

166151
export default class PaymentMethodModel extends Model {
167-
@belongsTo('user', { inverse: 'paymentMethods' }) user;
152+
@belongsTo('user', { async: true, inverse: 'paymentMethods' }) user;
168153
}
169154
```
170155

@@ -277,15 +262,15 @@ Let's assume that we have a `blog-post` and a `comment` model. A single blog pos
277262
import Model, { hasMany } from '@ember-data/model';
278263

279264
export default class BlogPostModel extends Model {
280-
@hasMany('comment') comments;
265+
@hasMany('comment', { async: true, inverse: 'blogPost' }) comments;
281266
}
282267
```
283268

284269
```javascript {data-filename=app/models/comment.js}
285270
import Model, { belongsTo } from '@ember-data/model';
286271

287272
export default class CommentModel extends Model {
288-
@belongsTo('blog-post') blogPost;
273+
@belongsTo('blog-post', { async: true, inverse: 'comments' }) blogPost;
289274
}
290275
```
291276

guides/v5.0.0/testing/testing-models.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default class ProfileModel extends Model {}
7777
import Model, { belongsTo } from '@ember-data/model';
7878

7979
export default class UserModel extends Model {
80-
@belongsTo('profile') profile;
80+
@belongsTo('profile', { async: false, inverse: null }) profile;
8181
}
8282
```
8383

0 commit comments

Comments
 (0)