Skip to content

Loading…

DDC-596: Add @DiscriminatorMap validation to orm:validate-schema #5102

Closed
doctrinebot opened this Issue · 4 comments

2 participants

@doctrinebot

Jira issue originally created by user mjh_ca:

Assuming that all child classes of an @InheritanceType("SINGLE_TABLE") and @InheritanceType("JOINED") table should be defined in the topmost parent's @DiscriminatorMap, it would be very helpful to add this validation to the CLI orm:valdiate-schema.

At present, if a child table is defined in the topmost table @DiscriminatorMap on a SINGLE_TABLE inheritance, then orm:validate-schema states that the mapping files are correct but then a Doctrine\DBAL\Schema\SchemaException is thrown. The same exception is also thrown for other schema-tool commands (such as 'create').

Haven't tested what happens on a JOINED table..

/****
 * @Entity @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"employee" = "Employee"})   // note, the second child table was accidentally omitted here
 */
class Person
{
    // ...
}

/****
 * @Entity
 */
class Employee extends Person
{
    // ...
}

/****
 * @Entity
 */
class Customer extends Person
{
    // ....
}

Schema tool commands (create, validate-schema) then throw:

  [Doctrine\DBAL\Schema\SchemaException]
  The table with name 'person' already exists.

... and orm:validate-schema actually says that the mapping is correct (which it obviously isn't) before throwing the exception:

[Mapping]  OK - The mapping files are correct.

  [Doctrine\DBAL\Schema\SchemaException]
  The table with name 'person' already exists.

Not critical since the mapping is obviously wrong here, but having this extra check in the validator could save a lot of debugging time. A duplicate table name error is confusing in this situation, and it seems wrong that the validate-schema command presently reports that the mapping files are correct when in fact the inheritance is broken.

@doctrinebot

Comment created by romanb:

Note: Not all* child classes must be specified, only those that are *entities. You can have non-mapped as well as mapped-superclasses as subclasses as well.

@doctrinebot

Comment created by @beberlei:

The validation task to perform here would be:

Throw a warning if there exists and entity that extends the Parentclass, is however not part of the DiscriminatorMap

@doctrinebot

Comment created by @beberlei:

Implemented

@doctrinebot

Issue was closed with resolution "Fixed"

@beberlei beberlei was assigned by doctrinebot
@doctrinebot doctrinebot added this to the 2.0-BETA3 milestone
@doctrinebot doctrinebot closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.