Prisma1: Can't have more than 2 relations between two types

Created on 20 Mar 2018  路  15Comments  路  Source: prisma/prisma1

Bug Report

Current behavior

When you are trying to deploy three or more relations between the same two types, you receive an internal server error:

prisma-database_1  | java.lang.IllegalArgumentException: requirement failed: This method must only be called for unambiguous relations!
prisma-database_1  |    at scala.Predef$.require(Predef.scala:277)
prisma-database_1  |    at com.prisma.shared.models.Schema.getUnambiguousRelationThatConnectsModels_$bang(Models.scala:114)
prisma-database_1  | {"key":"error/unhandled","requestId":"cluster:cluster:cjezvk0nk00190135wc9abixm","payload":{"exception":"java.lang.IllegalArgumentException
: requirement failed: This method must only be called for unambiguous relations!","query":"      mutation($name: String!, $stage: String! $types: String! $dryRu
n: Boolean $secrets: [String!], $subscriptions: [FunctionInput!]) {\n        deploy(input: {\n          name: $name\n          stage: $stage\n          types: $
types\n          dryRun: $dryRun\n          secrets: $secrets\n          subscriptions: $subscriptions\n        }) {\n          errors {\n            type\n
        field\n            description\n          }\n          migration {\n            ...MigrationFragment\n          }\n        }\n      }\n      \nfragment
MigrationFragment on Migration {\n  revision\n  steps {\n    type\n    __typename\n    ... on CreateEnum {\n      name\n      ce_values: values\n    }\n    ...
on CreateField {\n      model\n      name\n      cf_typeName: typeName\n      cf_isRequired: isRequired\n      cf_isList: isList\n      cf_isUnique: unique\n
   cf_relation: relation\n      cf_defaultValue: default\n      cf_enum: enum\n    }\n    ... on CreateModel {\n      name\n    }\n    ... on CreateRelation {\n
      name\n      leftModel\n      rightModel\n    }\n    ... on DeleteEnum {\n      name\n    }\n    ... on DeleteField {\n      model\n      name\n    }\n
... on DeleteModel {\n      name\n    }\n    ... on DeleteRelation {\n      name\n    }\n    ... on UpdateEnum {\n      name\n      newName\n      values\n    }
\n    ... on UpdateField {\n      model\n      name\n      newName\n      typeName\n      isRequired\n      isList\n      isUnique: unique\n      relation\n
  default\n      enum\n    }\n    ... on UpdateModel {\n      name\n      um_newName: newName\n    }\n  }\n}\n\n    ","variables":"{\"stage\":\"dev\",\"name\":\
"three-relations\",\"secrets\":null,\"types\":\"type A {\\n  id: ID! @unique\\n  title: String\\n  b1: B @relation(name: \\\"AB1\\\")\\n  b2: B @relation(name: \\\"AB2\\\")\\n  b3: B @relation(name: \\\"AB3\\\")\\n}\\n\\ntype B {\\n  id: ID
! @unique\\n  title: String\\n  a1: A @relation(name: \\\"AB1\\\")\\n  a2: A @relation(name: \\\"AB2\\\")\\n  a3: A @relation(name: \\\"AB3\\\")\\n}\\n\\n\",\"s
ubscriptions\":[]}","code":"0","stack_trace":"scala.Predef$.require(Predef.scala:277)\\n com.prisma.shared.models.Schema.getUnambiguousRelationThatConnectsModel
s_$bang(Models.scala:114)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$8(SchemaInferrer.scala:158)\\n scala.Option.orElse(
Option.scala:289)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$3(SchemaInferrer.scala:158)\\n scala.collection.Traversable
Like$WithFilter.$anonfun$map$2(TraversableLike.scala:739)\\n scala.collection.Iterator.foreach(Iterator.scala:929)\\n scala.collection.Iterator.foreach$(Iterato
r.scala:929)\\n scala.collection.AbstractIterator.foreach(Iterator.scala:1417)\\n scala.collection.IterableLike.foreach(IterableLike.scala:71)\\n scala.collecti
on.IterableLike.foreach$(IterableLike.scala:70)\\n scala.collection.AbstractIterable.foreach(Iterable.scala:54)\\n scala.collection.TraversableLike$WithFilter.m
ap(TraversableLike.scala:738)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$1(SchemaInferrer.scala:116)\\n scala.collection
.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)\\n scala.collection.Iterator.foreach(Iterator.scala:929)\\n scala.collection.Iterator.foreach$(It
erator.scala:929)\\n scala.collection.AbstractIterator.foreach(Iterator.scala:1417)\\n scala.collection.IterableLike.foreach(IterableLike.scala:71)\\n scala.col
lection.IterableLike.foreach$(IterableLike.scala:70)\\n scala.collection.AbstractIterable.foreach(Iterable.scala:54)\\n scala.collection.TraversableLike.flatMap
(TraversableLike.scala:241)\\n scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)\\n scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelat
ions$lzycompute(SchemaInferrer.scala:115)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelations(SchemaInferrer.scala:113)\\n com.prisma.depl
oy.migration.inference.SchemaInferrerImpl.$anonfun$fieldsForType$1(SchemaInferrer.scala:78)\\n scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLi
ke.scala:241)\\n scala.collection.Iterator.foreach(Iterator.scala:929)\\n scala.collection.Iterator.foreach$(Iterator.scala:929)\\n scala.collection.AbstractIte
rator.foreach(Iterator.scala:1417)\\n scala.collection.IterableLike.foreach(IterableLike.scala:71)\\n scala.collection.IterableLike.foreach$(IterableLike.scala:
70)\\n scala.collection.AbstractIterable.foreach(Iterable.scala:54)\\n scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)\\n scala.collection.T
raversableLike.flatMap$(TraversableLike.scala:238)\\n scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.fieldsForType(SchemaInferrer.scala:71)\\n com.prisma.deplo
y.migration.inference.SchemaInferrerImpl.$anonfun$nextModels$1(SchemaInferrer.scala:49)\\n scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala
:234)\\n scala.collection.Iterator.foreach(Iterator.scala:929)\\n scala.collection.Iterator.foreach$(Iterator.scala:929)\\n scala.collection.AbstractIterator.fo
reach(Iterator.scala:1417)\\n scala.collection.IterableLike.foreach(IterableLike.scala:71)\\n scala.collection.IterableLike.foreach$(IterableLike.scala:70)\\n s
cala.collection.AbstractIterable.foreach(Iterable.scala:54)\\n scala.collection.TraversableLike.map(TraversableLike.scala:234)\\n scala.collection.TraversableLi
ke.map$(TraversableLike.scala:227)\\n scala.collection.AbstractTraversable.map(Traversable.scala:104)\\n com.prisma.deploy.migration.inference.SchemaInferrerImp
l.nextModels$lzycompute(SchemaInferrer.scala:48)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextModels(SchemaInferrer.scala:47)\\n com.prisma.deploy.migration.inference.SchemaInferrerImpl.infer(SchemaInferrer.scala:37)\\n c
om.prisma.deploy.migration.inference.SchemaInferrer$$anon$1.infer(SchemaInferrer.scala:22)\\n com.prisma.deploy.schema.mutations.DeployMutation.performDeploymen
t(DeployMutation.scala:60)\\n com.prisma.deploy.schema.mutations.DeployMutation.execute(DeployMutation.scala:53)\\n com.prisma.deploy.schema.SchemaBuilderImpl.$
anonfun$deployField$7(SchemaBuilder.scala:187)\\n scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:302)\\n scala.concurrent.impl.Promise.$anonfun$transfo
rmWith$1(Promise.scala:37)\\n scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)\\n akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(Batching
Executor.scala:55)\\n akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)\\n scala.runtime.java8.JFunction0$mcV$sp.apply(JFu
nction0$mcV$sp.java:12)\\n scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)\\n akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)\\n akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:4
0)\\n akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:43)\\n akka.dispatch.forkjoin.ForkJoinTask.doExec(Fork
JoinTask.java:260)\\n akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)\\n akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPoo
l.java:1979)\\n akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)","message":"requirement failed: This method must only be called f
or unambiguous relations!"}}
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$8(SchemaInferrer.scala:158)
prisma-database_1  |    at scala.Option.orElse(Option.scala:289)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$3(SchemaInferrer.scala:158)
prisma-database_1  |    at scala.collection.TraversableLike$WithFilter.$anonfun$map$2(TraversableLike.scala:739)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:738)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextRelations$1(SchemaInferrer.scala:116)
prisma-database_1  |    at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
prisma-database_1  |    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelations$lzycompute(SchemaInferrer.scala:115)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelations(SchemaInferrer.scala:113)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$fieldsForType$1(SchemaInferrer.scala:78)
prisma-database_1  |    at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
prisma-database_1  |    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.fieldsForType(SchemaInferrer.scala:71)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextModels$1(SchemaInferrer.scala:49)
prisma-database_1  |    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.map(TraversableLike.scala:234)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)
prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
prisma-database_1  |    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelations$lzycompute(SchemaInferrer.scala:115)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextRelations(SchemaInferrer.scala:113)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$fieldsForType$1(SchemaInferrer.scala:78)
prisma-database_1  |    at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)
prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
prisma-database_1  |    at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
prisma-database_1  |    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.fieldsForType(SchemaInferrer.scala:71)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.$anonfun$nextModels$1(SchemaInferrer.scala:49)
prisma-database_1  |    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
prisma-database_1  |    at scala.collection.Iterator.foreach(Iterator.scala:929)
prisma-database_1  |    at scala.collection.Iterator.foreach$(Iterator.scala:929)
prisma-database_1  |    at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
prisma-database_1  |    at scala.collection.IterableLike.foreach(IterableLike.scala:71)
prisma-database_1  |    at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
prisma-database_1  |    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
prisma-database_1  |    at scala.collection.TraversableLike.map(TraversableLike.scala:234)
prisma-database_1  |    at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
prisma-database_1  |    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextModels$lzycompute(SchemaInferrer.scala:48)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.nextModels(SchemaInferrer.scala:47)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrerImpl.infer(SchemaInferrer.scala:37)
prisma-database_1  |    at com.prisma.deploy.migration.inference.SchemaInferrer$$anon$1.infer(SchemaInferrer.scala:22)
prisma-database_1  |    at com.prisma.deploy.schema.mutations.DeployMutation.performDeployment(DeployMutation.scala:60)
prisma-database_1  |    at com.prisma.deploy.schema.mutations.DeployMutation.execute(DeployMutation.scala:53)
prisma-database_1  |    at com.prisma.deploy.schema.SchemaBuilderImpl.$anonfun$deployField$7(SchemaBuilder.scala:187)
prisma-database_1  |    at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:302)
prisma-database_1  |    at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
prisma-database_1  |    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
prisma-database_1  |    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
prisma-database_1  |    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
prisma-database_1  |    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
prisma-database_1  |    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
prisma-database_1  |    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
prisma-database_1  |    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
prisma-database_1  |    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:43)
prisma-database_1  |    at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
prisma-database_1  |    at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
prisma-database_1  |    at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
prisma-database_1  |    at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
prisma-database_1  | [Bugsnag - local / testing] Error report: com.bugsnag.Report@29ad5ef3
prisma-database_1  | {"@timestamp":"2018-03-20T16:29:48.807+00:00","@version":1,"message":"{\"key\":\"request/complete\",\"requestId\":\"cluster:cluster:cjezvk0nk00190135wc9
abixm\",\"payload\":{\"request_duration\":\"54\"}}","logger_name":"com.prisma.deploy.server.ClusterServer","thread_name":"single-server-akka.actor.default-dispatcher-2","lev
el":"INFO","level_value":20000,"HOSTNAME":"9b814d9be711"}
prisma-database_1  | {"@timestamp":"2018-03-20T16:30:51.458+00:00","@version":1,"message":"{\"key\":\"request/new\",\"requestId\":\"cluster:cluster:cjezvld1d001a0135n1ht53ys
\"}","logger_name":"com.prisma.deploy.server.ClusterServer","thread_name":"single-server-akka.actor.default-dispatcher-18","level":"INFO","level_value":20000,"HOSTNAME":"9b8
14d9be711"}
prisma-database_1  | {"@timestamp":"2018-03-20T16:30:51.463+00:00","@version":1,"message":"{\"key\":\"request/complete\",\"requestId\":\"cluster:cluster:cjezvld1d001a0135n1h
t53ys\",\"payload\":{\"request_duration\":\"5\"}}","logger_name":"com.prisma.deploy.server.ClusterServer","thread_name":"single-server-akka.actor.default-dispatcher-16","lev
el":"INFO","level_value":20000,"HOSTNAME":"9b814d9be711"}

Reproduction

Deploy a new service using this data model:

type A {
  id: ID! @unique
  title: String
  # b1: B @relation(name: "AB1")
  # b2: B @relation(name: "AB2")
  # b3: B @relation(name: "AB3")
}

type B {
  id: ID! @unique
  title: String
  # a1: A @relation(name: "AB1")
  # a2: A @relation(name: "AB2")
  # a3: A @relation(name: "AB3")
}

Uncomment a1 and b1 and deploy. It works!
Uncomment a2 and b2 and deploy. It works!
Uncomment a3 and b3 and deploy. It doesn't work!

This is on version 1.4.1.

Expected behavior?

It works.

bu2-confirmed aredeploy

All 15 comments

Thanks. This indeed is a huge problem for us right now. Hoping it'll get fixed soon.

@marktani .....Thanks for reporting this bug.
However in my case I am not able to deploy using 2 relations on 2 same types.
In your example above, deploy fails at

"Uncomment a2 and b2 and deploy. It works!"

You don't have that problem?

I was the one that reported this to @marktani, but just want to echo the above - huge problem here too.

@marktani Hi Nilan,
Has this issue been solved in the latest release??

@sorenbs this is still an issue for us.
When adding a third relation. It spits this error. And our relations are each clearly named.
screen shot 2018-04-15 at 8 51 18 pm

@roycclu, can you please describe exactly what you are doing to receive this error message?

@marktani sure.
In the old graphcool (we are migrating from graphcool to prisma), we had five relations between User and Post:

  1. creators of posts 1-N
  2. collaborators on posts N-N
  3. users who viewed the posts N-N
  4. users who are allowed to view the posts N-N
  5. users who liked the posts N-N

right now our datamodel.graphql reads like:

type User {
  postsLiked: [Post!]! @relation(name: "UsersLikePosts")
  postsViewed: [Post!]! @relation(name: "UsersViewedPosts")
  ...
}

type Post {
  likedUsers: [User!]! @relation(name: "UsersLikePosts")
  viewedBy: [User!]! @relation(name: "UsersViewedPosts")
   ...
}

As soon as I add one more relation as below. We get that "There is a relation ambiguity during the migration..." error

type User {
  postsCreated: [Post!]! @relation(name: "UserCreatePosts")
  postsLiked: [Post!]! @relation(name: "UsersLikePosts")
  postsViewed: [Post!]! @relation(name: "UsersViewedPosts")
  ...
}

type Post {
  creator: User @relation(name: "UserCreatePosts")
  likedUsers: [User!]! @relation(name: "UsersLikePosts")
  viewedBy: [User!]! @relation(name: "UsersViewedPosts")
   ...
}

You can see that each relation is clearly labeled. There are no other relations between Post and User other than the above listed.

Any idea what's going on? This is a serious issue. We are close to our beta testing. And this is a blocking issue!

Thanks

I cannot reproduce the message following the steps you provided.

Are there any relational fields on User or Post in the initial schema that you didn't share yet?

This is our entire User type. As you can see, there are no other relations between User and Post except for the ones shown.

type User {
  id: ID! @unique
  firstName: String!
  lastName: String!
  phone: String! @unique
  email: String! @unique
  password: String!
  privacySetting: PrivacySetting

  avatar: File @relation(name: "UserAvatar")
  birthday: DateTime
  gender: Gender
  city: String @default(value: "")
  university: String @default(value: "") # TODO make this a relation
  highschool: String @default(value: "") # TODO make this a relation

  friendRequestsReceived: [User!]! @relation(name: "FriendRequests")
  friendRequestsSend: [User!]! @relation(name: "FriendRequests")
  friends: [User!]! @relation(name: "Friends")

#  posts: [Post!]! @relation(name: "UsersOwnPosts")
#  postsCreated: [Post!]! @relation(name: "UserCreatePosts")
#  postsCreated: [Post!]! @relation(name: "UserCreatePosts")
  postsLiked: [Post!]! @relation(name: "UsersLikePosts")
  postsViewed: [Post!]! @relation(name: "UsersViewedPosts")
#  postsCollaborated: [Post!]! @relation(name: "UsersCollaboratePosts")

  pollOptionsVoted: [PollOption!]! @relation(name: "PollOptionsVotedByUsers")

  predictsAgreed: [Predict!]! @relation(name: "UsersAgreePredict")
  predictsDisagreed: [Predict!]! @relation(name: "UsersDisagreePredict")

  goalSupported: [Goal!]! @relation(name: "UsersSupportGoals")

  eventsDeclined: [Event!]! @relation(name: "UsersDeclinedEvents")
  eventsGoing: [Event!]! @relation(name: "UsersGoingEvents")
  eventsInvited: [Event!]! @relation(name: "UsersInvitedEvents")

  comments: [Comment!]! @relation(name: "UserCommentToPost")
  notificationReceived: [Notification!]! @relation(name: "ReceiverNotifications")
  notificationsSent: [Notification!]! @relation(name: "SenderNotifications")
}

Well, if you manage to reproduce this let me know so I can try to reproduce it as well 馃檪

Hello Nilan,
To follow up, I created a test project that reproduces this issue.
It can be found here: https://github.com/yoorw/multipleRelationExample

You can see the datamodel.graphql file only has 2 types: Link and User.
Currently there are 3 relations between the types.
This causes prisma deploy to fail - error output claims ambiguity.

Prisma Deploys successfully when only 1 relation exists between Link and User.

Are you able to test this out and see what the hangup is?

Thanks,

Hey @yoorw, I cannot reproduce this when deploying against the development cluster, which is on version 1.6.1.

I'll close this, as the originally reported issue is fixed. If you are still experiencing any issues, please create a new report 馃檪

Thanks for following up. It is confirmed with our test project that issue no longer exists after version 1.6.0

However our cluster has issues with upgrading. That is a separate issue.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ragnorc picture ragnorc  路  3Comments

jannone picture jannone  路  3Comments

marktani picture marktani  路  3Comments

schickling picture schickling  路  3Comments

thomaswright picture thomaswright  路  3Comments