DDC-1114: Association on a non primary key field - fix the commit order #1711

doctrinebot opened this Issue Apr 14, 2011 · 4 comments

2 participants


Jira issue originally created by user dan_liip:

We are trying to create an association which referenced column is not a primary key.

The source entity mapping looks like:

The destination entity mapping is:

<entity name="Joiz\ShowBundle\Entity\ShowInstance" table="show_instance" repository-class="Joiz\ShowBundle\Entity\ShowInstanceRepository">

    <id name="id" column="id" type="integer">
        <generator strategy="IDENTITY" />

    <field name="extid" column="extid" type="string" unique="true" />

    <!-- ... snip ... -->


Doctrine will correctly create the tables with the above mapping but the association does not seem to work.

When we try to load some data in the tables:

    $showInst = new ShowInstance();

    $teaser = new ShowInstanceTeaser();

This will leave the column "teaser.showinstanceextid" null.

Doing the same but using the primary key for the association will work.

In a discussion on the #doctrine-dev channel on freenode beberlei explained:

ah the problem is probably the CommitOrderCalculator does not know of this foreign key
and sorts the inserts in the wrong order

you cannot add foreign keys say through some mapping information in annotations or xml the like
you have to create them manually
and in this case doctrine might end up in troubles depending on the commit order
hibernate solves this by allowing to specifiy additional constraints that are recognized while calculating the commit order, but this is not yet in tdoctrine2. can you open up a ticket for this?


Comment created by @beberlei:

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


Comment created by @guilhermeblanco:

Any ORM can't be designed to map associations on non-ID fields.

Ideally, no IDs would be exposed to user (they should be controlled internally), but since almost everything rely on IDs to be passed this is exposed to the user.

Anyway, this ticket is invalid as it's an invalid usage of the ORM tool.


Issue was closed with resolution "Invalid"

@doctrinebot doctrinebot closed this Dec 6, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment