Skip to content

Commit 269012d

Browse files
committed
Fix eagerLoading
1 parent b6567f6 commit 269012d

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

src/graphql/query-builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ export default class QueryBuilder {
234234
context.logger.log('WARNING: field has neither parent nor related property. Fallback to attribute name', field);
235235
}
236236

237-
if (model.shouldEagerLoadRelation(field, relatedModel) &&
237+
if (model.shouldEagerLoadRelation(name, field, relatedModel) &&
238238
!this.shouldRelationBeIgnored(model, relatedModel, ignoreRelations)) {
239239

240240
const multiple: boolean = !(field instanceof context.components.BelongsTo ||

src/orm/model.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,20 @@ export default class Model {
206206
* @param {Model} relatedModel Related model
207207
* @returns {boolean}
208208
*/
209-
public shouldEagerLoadRelation (field: Field, relatedModel: Model): boolean {
209+
public shouldEagerLoadRelation (fieldName: string, field: Field, relatedModel: Model): boolean {
210210
const context = Context.getInstance();
211211

212-
if (field instanceof context.components.HasOne || field instanceof context.components.BelongsTo) {
212+
if (
213+
field instanceof context.components.HasOne ||
214+
field instanceof context.components.BelongsTo ||
215+
field instanceof context.components.MorphOne
216+
) {
213217
return true;
214218
}
215219

216220
const eagerLoadList: Array<String> = this.baseModel.eagerLoad || [];
217-
return eagerLoadList.find((n) => n === relatedModel.singularName || n === relatedModel.pluralName) !== undefined;
221+
return eagerLoadList.find((n) => {
222+
return n === relatedModel.singularName || n === relatedModel.pluralName || n === fieldName;
223+
}) !== undefined;
218224
}
219225
}

test/unit/Model.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,19 +136,19 @@ describe('Model', () => {
136136
describe('.shouldEagerLoadRelation', () => {
137137
it('returns true if field is a belongsTo or hasOne relation', () => {
138138
const model = context.getModel('post');
139-
expect(model.shouldEagerLoadRelation(model.fields.get('user'), context.getModel('user'))).toEqual(true);
139+
expect(model.shouldEagerLoadRelation('user', model.fields.get('user'), context.getModel('user'))).toEqual(true);
140140

141141
// TODO test hasOne
142142
});
143143

144144
it('returns true if field is in the eagerLoad array', () => {
145145
const model = context.getModel('post');
146-
expect(model.shouldEagerLoadRelation(model.fields.get('comments'), context.getModel('comment'))).toEqual(true);
146+
expect(model.shouldEagerLoadRelation('post', model.fields.get('comments'), context.getModel('comment'))).toEqual(true);
147147
});
148148

149149
it('returns false if field neither belongsTo/hasOne nor in the eagerLoad array', () => {
150150
const model = context.getModel('user');
151-
expect(model.shouldEagerLoadRelation(model.fields.get('comments'), context.getModel('comment'))).toEqual(false);
151+
expect(model.shouldEagerLoadRelation('user', model.fields.get('comments'), context.getModel('comment'))).toEqual(false);
152152
});
153153
});
154154
});

0 commit comments

Comments
 (0)