Skip to content

Loading…

DDC-1269: Unexpected behavior while using association on a non primary key field #1880

Closed
doctrinebot opened this Issue · 9 comments

2 participants

@doctrinebot

Jira issue originally created by user saniok:

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](http://www.doctrine-project.org/jira/browse/DDC-1114). What do you think about this?

@doctrinebot

Comment created by @beberlei:

Formatting, please add a second ticket for the second issue.

@doctrinebot

Comment created by @beberlei:

I don't think its supported to use a non primary id for foreign key matching. I cant tell for sure though since i wasnt responsible to design this part of the Doctrine code. I would strongly suggest not to do this.

@doctrinebot

Comment created by @beberlei:

Marked as improvement. The problem is we cannot detect this invalid mapping, so no exception is thrown during compilation of the mappings,

@doctrinebot

Comment created by @beberlei:

This kind of mapping error is already acknowledged by the schema-validator console task.

@doctrinebot

Comment created by saniok:

Should I create second ticket?

Please confirm that I understood correctly. Should we avoid such mapping as it is considered as invalid.

@doctrinebot

Comment created by @beberlei:

Yes, it will not work at all. You dont need to create the second ticket as that error steams from the mapping error.

You will see an error message when calling ./doctrine orm:schema:validate with this mapping.

@doctrinebot

Issue was closed with resolution "Invalid"

@beberlei beberlei was assigned by doctrinebot
@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.