cycle / annotated

Schema generation using annotated entities and mappers
MIT License
23 stars 12 forks source link

Select query with polymorphic relationship does not work #48

Closed roquie closed 2 years ago

roquie commented 2 years ago

Generated SQL:

 SELECT "serviceAccount"."key" AS "c0", "serviceAccount"."name" AS "c1", "serviceAccount"."id" AS "c2", "serviceAccount"."created_at" AS "c3", "serviceAccount"."updated_at" AS "c4",
"serviceAccount"."deleted_at" AS "c5", "l_serviceAccount_configuration"."timezone" AS "c6", "l_serviceAccount_configuration"."id" AS "c7",
"l_serviceAccount_configuration"."created_at" AS "c8", "l_serviceAccount_configuration"."updated_at" AS "c9", "l_serviceAccount_configuration"."deleted_at" AS "c10",
"l_serviceAccount_configuration"."configuration_id" AS "c11", "l_serviceAccount_configuration"."{relationName}_role" AS "c12", "l_serviceAccount_configuration"."configuration_role"
AS "c13"
FROM "service_accounts" AS "serviceAccount" 
LEFT JOIN "configurations" AS "l_serviceAccount_configuration"
    ON "l_serviceAccount_configuration"."configuration_id" = "serviceAccount"."id" AND "l_serviceAccount_configuration"."deleted_at" IS NULL AND "l_serviceAccount_configuration"."configuration_role" = 'serviceAccount'  
WHERE "serviceAccount"."key" = 'system' AND "serviceAccount"."deleted_at" IS NULL 
LIMIT 1

Sample code to reproduce:

#[Cycle\Entity]
class ServiceAccount 
{
    #[Cycle\Relation\Morphed\MorphedHasOne(
        target: Configuration::class,
//        morphKey: 'configuration_role', // FIX
        load: 'eager'
    )]
    protected ?Configuration $configuration = null;
}

#[Cycle\Entity]
class Configuration
{
 // ...
}

{relationName} – is a template variable which not replaced before query execution.

P.S.

roquie commented 2 years ago

Also didn't work with insert queries:

 INSERT INTO "presences" ("verified_at", "status", "comment", "id", "{relationName}_role", "student_day_id", "author_id") VALUES ('2022-01-17T10:42:31+00:00', 'initiated', NULL, '0a997a4d-beeb-4e75-a8af-9e96febcf5a5', 'serviceAccount', '5cf70658-2f0b-4a03-b27a-07078b53e4f6', 'c1c1cd29-ccb2-48d9-bbb8-63a8705fb62f') RETURNING "id"

BelongsToMorphed annotation.