Skip to content

Adding joins on already present relationships breaks GraphQL #12775

Closed
@carstenblt

Description

@carstenblt

Describe the Bug

When adding a join to a collection, where a relationship has already been created, any GraphQL query to that collection fails with

[22:13:15] ERROR: Cannot set properties of undefined (setting '0')
    err: {
      "type": "GraphQLError",
      "message": "Cannot set properties of undefined (setting '0')",
      "stack":
          TypeError: Cannot set properties of undefined (setting '0')
              at populate (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/relationshipPopulationPromise.js:61:65)
              at rowPromise (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/relationshipPopulationPromise.js:120:31)
              at file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/relationshipPopulationPromise.js:137:34
              at Array.forEach (<anonymous>)
              at relationshipPopulationPromise (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/relationshipPopulationPromise.js:117:108)
              at promise (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/promise.js:233:37)
              at file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:4:28
              at Array.forEach (<anonymous>)
              at traverseFields (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:3:12)
              at promise (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/promise.js:639:17)
              at file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:4:28
              at Array.forEach (<anonymous>)
              at traverseFields (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:3:12)
              at promise (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/promise.js:673:17)
              at file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:4:28
              at Array.forEach (<anonymous>)
              at traverseFields (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/traverseFields.js:3:12)
              at afterRead (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/fields/hooks/afterRead/index.js:21:5)
              at file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/collections/operations/find.js:205:70
              at Array.map (<anonymous>)
              at findOperation (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/payload@3.42.0_graphql@16.11.0_typescript@5.8.3/node_modules/payload/dist/collections/operations/find.js:205:53)
              at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
              at async resolver (file:///Users/carsten/dev/tarabao/node_modules/.pnpm/@payloadcms+graphql@3.42.0_graphql@16.11.0_payload@3.42.0_graphql@16.11.0_typescript@5.8.3__typescript@5.8.3/node_modules/@payloadcms/graphql/dist/resolvers/collections/find.js:33:25)
              at async Promise.all (index 0)
              at async handler (webpack-internal:///(rsc)/../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.11.0/node_modules/graphql-http/lib/handler.mjs:338:22)
              at async handleRequest (webpack-internal:///(rsc)/../../node_modules/.pnpm/graphql-http@1.22.4_graphql@16.11.0/node_modules/graphql-http/lib/use/fetch.mjs:102:34)
              at async eval (webpack-internal:///(rsc)/../../node_modules/.pnpm/@payloadcms+next@3.42.0_@types+react@19.0.8_graphql@16.11.0_monaco-editor@0.38.0_next@1_38eba045ea89910b8113433f526663bb/node_modules/@payloadcms/next/dist/routes/graphql/handler.js:107:23)
              at async AppRouteRouteModule.do (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:34112)
              at async AppRouteRouteModule.handle (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:26:41338)
              at async doRender (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:1518:42)
              at async DevServer.renderToResponseWithComponentsImpl (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:1920:28)
              at async DevServer.renderPageComponent (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:2408:24)
              at async DevServer.renderToResponseImpl (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:2445:32)
              at async DevServer.pipeImpl (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:1008:25)
              at async NextNodeServer.handleCatchallRenderRequest (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/next-server.js:305:17)
              at async DevServer.handleRequestImpl (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/base-server.js:900:17)
              at async /Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/dev/next-dev-server.js:371:20
              at async Span.traceAsyncFn (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/trace/trace.js:157:20)
              at async DevServer.handleRequest (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/dev/next-dev-server.js:368:24)
              at async invokeRender (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/lib/router-server.js:237:21)
              at async handleRequest (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/lib/router-server.js:428:24)
              at async requestHandlerImpl (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/lib/router-server.js:452:13)
              at async Server.requestListener (/Users/carsten/dev/tarabao/node_modules/.pnpm/next@15.3.3_@babel+core@7.27.4_@opentelemetry+api@1.9.0_@playwright+test@1.50.1_babel-p_a8fe3bc094ff9acb889a7fb77357310c/node_modules/next/dist/server/lib/start-server.js:158:13)
      "path": [
        "Products"
      ],
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "extensions": {}
    }

Link to the code that reproduces this issue

requires data and modifications...

Reproduction Steps

  1. Create collection A and B. B has a relationship to A.
  2. Create some document of A and a document of B, that links to A.
  3. In collection A create a join with B.
  4. Query A with GraphQL

Which area(s) are affected? (Select all that apply)

db-mongodb

Environment Info

Binaries:
  Node: 22.16.0
  npm: 10.9.2
  Yarn: 1.22.19
  pnpm: 10.12.1
Relevant Packages:
  payload: 3.42.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions