Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1109

SINGLE_TABLE mapping fails to set the discriminator column value on persist if the mapping classes are specified with fully qualified namespace

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 2.0.4
    • Fix Version/s: 2.0.5
    • Component/s: ORM
    • Security Level: All
    • Labels:
      None
    • Environment:
      Debian GNU/Linux 6.0, mysql 5.1.56-0.dotdeb.1, PHP 5.3.5-0.dotdeb.1

      Description

      If I specify a single inheritance structure with the mapping classes specified with fully qualified namespace in the annotation and then if I create a new mapped entity and try to save it, doctrine specifies the value for the discriminator column as NULL and thus the fush fails with mysql complaining the discriminator column to be NULL. If I specify the mapping classes without fully qualified namespace the persist works as expected

      For example this fails:

      <?php
      namespace Entities;
      /**
       * @Entity
       * @InheritanceType("SINGLE_TABLE")
       * @DiscriminatorColumn(name="itemType", type="integer")
       * @DiscriminatorMap({
       * "0"="\Entities\Data\Integer",
       * "5"="\Entities\Data\Text",
       * "6"="\Entities\Data\Form"
       * })
       */
      class master {
      

      But this works as expected:

      <?php
      namespace Entities;
      /**
       * @Entity
       * @InheritanceType("SINGLE_TABLE")
       * @DiscriminatorColumn(name="itemType", type="integer")
       * @DiscriminatorMap({
       * "0"="Entities\Data\Integer",
       * "5"="Entities\Data\Text",
       * "6"="Entities\Data\Form"
       * })
       */
      class master {
      

      The obivous workaround for now is to not use fully qualified namespaced classes for the discriminator maps, but rather relative.

      attached is the doctrine sanbox with the failing setup

        Activity

        Hide
        Benjamin Eberlei added a comment -

        Namespaces are never referred with a leading prefix in strings. This is PHP convention. However we can easily ltrim the slash here in the mapping drivers for convenenince.

        schedulding for 2.0.5

        Show
        Benjamin Eberlei added a comment - Namespaces are never referred with a leading prefix in strings. This is PHP convention. However we can easily ltrim the slash here in the mapping drivers for convenenince. schedulding for 2.0.5
        Hide
        Benjamin Eberlei added a comment -

        Fixed.

        Show
        Benjamin Eberlei added a comment - Fixed.

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Simon Zamecnik
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: