Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-596

Add @DiscriminatorMap validation to orm:validate-schema

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0-BETA2
    • Fix Version/s: 2.0-BETA3
    • Component/s: None
    • Security Level: All
    • Labels:
      None

      Description

      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.

        Activity

        Hide
        Roman S. Borschel added a comment -

        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.

        Show
        Roman S. Borschel added a comment - 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.
        Hide
        Benjamin Eberlei added a comment -

        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

        Show
        Benjamin Eberlei added a comment - 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
        Hide
        Benjamin Eberlei added a comment -

        Implemented

        Show
        Benjamin Eberlei added a comment - Implemented

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Marc Hodgins
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: