Skip to content

Loading…

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

Closed
doctrinebot opened this Issue · 4 comments

2 participants

@doctrinebot

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" />
    </id>

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

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

</entity>

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();
    $showInst->setExtid(999);
    $manager->persist($showInst);

    $teaser = new ShowInstanceTeaser();
    $teaser->setShowInstance($showInst);
    $manager->persist($teaser);

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?

@doctrinebot

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.

@doctrinebot

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.

@doctrinebot

Issue was closed with resolution "Invalid"

@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.