Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1269

Unexpected behavior while using association on a non primary key field

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: 2.1
    • Fix Version/s: None
    • Component/s: None
    • Security Level: All
    • Labels:
      None

      Description

      We have association on non primary key. Something like this:

      Entities\Payment:
        type: entity
        table: payments
        fields:
          id: 
            id: true
            type: integer
            nullable: false
            generator:
              strategy: IDENTITY
      [-- skipped --]
        manyToOne:
          order:
            targetEntity: Entities\Order
            inversedBy: payments
            joinColumn:
              name: scode
              referencedColumnName: scode
      
      Entities\Order:
        type: entity
        table: h_orders
        fields:
          id:
            id: true
            type: integer
            unsigned: false
            nullable: false
            generator:
              strategy: IDENTITY
          scode:
            type: integer
            unsigned: false
            nullable: false
      [-- skipped --]
        oneToMany:
          payments:
            targetEntity: Entities\Payment
            mappedBy: order
      

      When I try to fetch Order from Payment with lazy loading I receive empty Order object with null properties. If I use eager fetching Order object is valid.
      SQL generated for lazy loading seems to be valid, so I suppose the problem is in mapping result to the object. At the same time lazy loading works fine with 2.0.6 version.

      Another problem appears while persisting new Payment.

      $payment = new \Entities\Payment();
      ...
      $order = $this->em->getRepository('\Entities\Order')->find(46320);
      $payment->setOrder($order);
      $order->addPayments($payment);
      $this->em->persist($payment);
      $this->em->flush();
      

      I get this error: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'scode' cannot be null' in /usr/share/php/Doctrine/DBAL/Statement.php:131

      I found issue which is still open and looks like mine – http://www.doctrine-project.org/jira/browse/DDC-1114. What do you think about this?

        Issue Links

          Activity

          Alexandr Torchenko created issue -
          Benjamin Eberlei made changes -
          Field Original Value New Value
          Description We have association on non primary key. Something like this:

          Entities\Payment:
            type: entity
            table: payments
            fields:
              id:
                id: true
                type: integer
                nullable: false
                generator:
                  strategy: IDENTITY
          [-- skipped --]
            manyToOne:
              order:
                targetEntity: Entities\Order
                inversedBy: payments
                joinColumn:
                  name: scode
                  referencedColumnName: scode


          Entities\Order:
            type: entity
            table: h_orders
            fields:
              id:
                id: true
                type: integer
                unsigned: false
                nullable: false
                generator:
                  strategy: IDENTITY
              scode:
                type: integer
                unsigned: false
                nullable: false
          [-- skipped --]
            oneToMany:
              payments:
                targetEntity: Entities\Payment
                mappedBy: order

          When I try to fetch Order from Payment with lazy loading I receive empty Order object with null properties. If I use eager fetching Order object is valid.
          SQL generated for lazy loading seems to be valid, so I suppose the problem is in mapping result to the object. At the same time lazy loading works fine with 2.0.6 version.




          Another problem appears while persisting new Payment.
          $payment = new \Entities\Payment();
          ...
          $order = $this->em->getRepository('\Entities\Order')->find(46320);
          $payment->setOrder($order);
          $order->addPayments($payment);
          $this->em->persist($payment);
          $this->em->flush();

          I get this error: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'scode' cannot be null' in /usr/share/php/Doctrine/DBAL/Statement.php:131

          I found issue which is still open and looks like mine -- http://www.doctrine-project.org/jira/browse/DDC-1114. What do you think about this?
          We have association on non primary key. Something like this:

          {code}
          Entities\Payment:
            type: entity
            table: payments
            fields:
              id:
                id: true
                type: integer
                nullable: false
                generator:
                  strategy: IDENTITY
          [-- skipped --]
            manyToOne:
              order:
                targetEntity: Entities\Order
                inversedBy: payments
                joinColumn:
                  name: scode
                  referencedColumnName: scode
          {code}

          {code}
          Entities\Order:
            type: entity
            table: h_orders
            fields:
              id:
                id: true
                type: integer
                unsigned: false
                nullable: false
                generator:
                  strategy: IDENTITY
              scode:
                type: integer
                unsigned: false
                nullable: false
          [-- skipped --]
            oneToMany:
              payments:
                targetEntity: Entities\Payment
                mappedBy: order
          {code}

          When I try to fetch Order from Payment with lazy loading I receive empty Order object with null properties. If I use eager fetching Order object is valid.
          SQL generated for lazy loading seems to be valid, so I suppose the problem is in mapping result to the object. At the same time lazy loading works fine with 2.0.6 version.




          Another problem appears while persisting new Payment.

          {code}
          $payment = new \Entities\Payment();
          ...
          $order = $this->em->getRepository('\Entities\Order')->find(46320);
          $payment->setOrder($order);
          $order->addPayments($payment);
          $this->em->persist($payment);
          $this->em->flush();
          {code}

          I get this error: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'scode' cannot be null' in /usr/share/php/Doctrine/DBAL/Statement.php:131

          I found issue which is still open and looks like mine -- http://www.doctrine-project.org/jira/browse/DDC-1114. What do you think about this?
          Benjamin Eberlei made changes -
          Link This issue is referenced by DDC-1114 [ DDC-1114 ]
          Benjamin Eberlei made changes -
          Issue Type Bug [ 1 ] Improvement [ 4 ]
          Benjamin Eberlei made changes -
          Workflow jira [ 12813 ] jira-feedback [ 13951 ]
          Benjamin Eberlei made changes -
          Workflow jira-feedback [ 13951 ] jira-feedback2 [ 15815 ]
          Benjamin Eberlei made changes -
          Workflow jira-feedback2 [ 15815 ] jira-feedback3 [ 18071 ]
          Steve Müller made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Invalid [ 6 ]

            People

            • Assignee:
              Benjamin Eberlei
              Reporter:
              Alexandr Torchenko
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: