Skip to content

Allow entity id scalar generation #694

Open
@Vincz

Description

@Vincz
Q A
Bug report? no
Feature request? yes
BC Break report? no
RFC? no
Version/Branch 1.0.0

I'm currently working on a pretty big corporate application. So I have many entities with cruds, forms, etc... So a lot of code is "automatic" and it's great. I know feel the same need expressed here : #683

The use case is quite simple. When I create a form for an entity (and I have many), I describe my Input with foreign key id as Int and I have to convert them back to entities in my resolver.
For example:

HeroInput:
    type: input-object
    config:
        fields:
            name:
                type: "String!"
           partnerId:
                type: "Int"

And in my resolver, I have to do something like :

function resolve($input) {
   $hero = new Hero();
   $hero->setName($input['name']);
   $partner = $this->getEntityManager()->getRepository(Hero::class)->find($input['partnerId']);
   $hero->setPartner($partner);
}

So, I have to be specific for each different entity (one resolver by entity), preventing me from having a single generic resolve function.

If we could automatically generate scalars to represent each entity, we could save a lot of time.
The Input would become:

HeroInput:
    type: input-object
    config:
        fields:
            name:
                type: "String!"
           partnerId:
                type: "HeroId"

and the resolver :

function resolve($input) {
   $hero = new Hero();
   $hero->setName($input['name']);
   $hero->setPartner($input['partner']);
}

and the generated scalar would simply be a id to entity converter like #683 (comment) for example.

The option could be opt in by simply adding a "generateScalar" boolean option on the @GQL\Type annotation. I'm not sure how we could implement this out of annotation.

Let me know what you think.

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