diff --git a/packages/repository-tests/src/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.ts b/packages/repository-tests/src/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.ts index d1a5068d5a3b..5b65cb4872a3 100644 --- a/packages/repository-tests/src/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.ts +++ b/packages/repository-tests/src/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.ts @@ -160,6 +160,44 @@ export function belongsToInclusionResolverAcceptance( expect(toJSON(result)).to.deepEqual(toJSON(expected)); }); + it('queries entities with null foreign key', async () => { + const customer = await customerRepo.create({ + name: 'Thor', + }); + + // order with customer relation + const order1 = await orderRepo.create({ + customerId: customer.id, + description: 'Take Out', + }); + + // order without customer relation + const order2 = await orderRepo.create({ + description: 'Dine in', + }); + + const expected = [ + { + ...order1, + isShipped: features.emptyValue, + shipmentInfo: features.emptyValue, + customer: { + ...customer, + parentId: features.emptyValue, + }, + }, + { + ...order2, + customerId: features.emptyValue, + isShipped: features.emptyValue, + shipmentInfo: features.emptyValue, + }, + ]; + + const result = await orderRepo.find({include: [{relation: 'customer'}]}); + expect(toJSON(result)).to.deepEqual(toJSON(expected)); + }); + it('throws error if the target repository does not have the registered resolver', async () => { const customer = await customerRepo.create({name: 'customer'}); await orderRepo.create({ diff --git a/packages/repository/src/relations/belongs-to/belongs-to.inclusion-resolver.ts b/packages/repository/src/relations/belongs-to/belongs-to.inclusion-resolver.ts index 476399d98c9b..26e8c48e966f 100644 --- a/packages/repository/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +++ b/packages/repository/src/relations/belongs-to/belongs-to.inclusion-resolver.ts @@ -52,12 +52,13 @@ export function createBelongsToInclusionResolver< const sourceKey = relationMeta.keyFrom; const sourceIds = entities.map(e => (e as AnyObject)[sourceKey]); const targetKey = relationMeta.keyTo as StringKeyOf; + const dedupedSourceIds = deduplicate(sourceIds); const targetRepo = await getTargetRepo(); const targetsFound = await findByForeignKeys( targetRepo, targetKey, - deduplicate(sourceIds), + dedupedSourceIds.filter(e => e), inclusion.scope as Filter, options, );