diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser.ts index 8b61a0d51..1b526b40e 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser.ts @@ -75,11 +75,28 @@ export class GraphqlQuerySelectedFieldsParser { for (const [fieldKey, fieldValue] of Object.entries( graphqlSelectedFields, )) { - const fieldMetadata = + const fieldMetadataBasedOnName = objectMetadataMapItem.fieldsById[ objectMetadataMapItem.fieldIdByName[fieldKey] ]; + const isFieldForeignKey = + !fieldMetadataBasedOnName && fieldKey.endsWith('Id'); + + if (isFieldForeignKey) { + const fieldMetadataBasedOnRelationName = + objectMetadataMapItem.fieldsById[ + objectMetadataMapItem.fieldIdByName[fieldKey.slice(0, -2)] + ]; + + if (fieldMetadataBasedOnRelationName) { + accumulator.select[fieldKey] = true; // field is not a connection so should not be treated as a relation + continue; + } + } + + const fieldMetadata = fieldMetadataBasedOnName; + if (!fieldMetadata) { continue; }