Skip to content

Loading…

DDC-2119: Problem with inheritance type: INHERITANCE_TYPE_NONE and INHERITANCE_TYPE_TABLE_PER_CLASS #2805

Open
doctrinebot opened this Issue · 7 comments

2 participants

@doctrinebot

Jira issue originally created by user sergsw:

I tried to create inheritance entities with save policy table per class.
Simple fileds was created normally, but a field with ManyToOne type was lost.

I had found a solution.

In Doctrine\ORM\Tools\SchemaTool
...

private function _gatherRelationsSql($class, $table, $schema)
    {
        foreach ($class->associationMappings as $fieldName => $mapping) {

           // if (isset($mapping['inherited'])) { // - old version

    /****
             * SSW
             * It's the solution
             */
    if (isset($mapping['inherited']) && !$class->isInheritanceTypeNone() && !$class->isInheritanceTypeTablePerClass() ) {
                continue;
            }            

            $foreignClass = $this->_em->getClassMetadata($mapping['targetEntity']);
...

But it was enough. In DQL query a simple query was made wrong.

I had found a solution again.
In Doctrine\ORM\Query\SqlWalker
...

public function walkSelectExpression($selectExpression)
...

                // original => if (isset($mapping['inherited'])){
                // It's the solution
                if (isset($mapping['inherited']) && !$class->isInheritanceTypeNone() && !$class->isInheritanceTypeTablePerClass()) {
                    $tableName = $this->_em->getClassMetadata($mapping['inherited'])->table['name'];
                } else {
                    $tableName = $class->table['name'];
                }
...

This problems are topical for inheritance type: INHERITANCETYPE_NONE and INHERITANCE_TYPE_TABLE_PERCLASS.

I don't know, may be my solutions are wrong. But some programmers want to correctly work with INHERITANCETYPE_TABLE_PERCLASS.

Sorry for my english.

@doctrinebot

Comment created by @FabioBatSilva:

Hi SergSW

Could you try to write a failing test case ?

Thanks

@doctrinebot

Comment created by sergsw:

SSW/TestBundle with the problem

@doctrinebot

Comment created by sergsw:

I install the Symfony v2.0.18. and made small TestBundle.
I made schema database, by CLI "console doctrine:schema:update --force"
Result: Database schema updated successfully!
But I saw that I lost a field 'user_id' in a table 'AttachTree' (see Attach)

@doctrinebot

Comment created by sergsw:

MySQL dump

@doctrinebot

Comment created by @beberlei:

Adjusted example formatting, don't apologize for your English, thanks for the report!

@doctrinebot

Comment created by @beberlei:

What version of 2.1 are you using? We don't actually support 2.1 anymore. Inheritance has always worked as used in hundrets of unit-tests, this changes look quite major a bug to have been missed before. I can't really explain whats happening here.

@doctrinebot

Comment created by @ocramius:

[~sergsw] news?

@beberlei beberlei was assigned by doctrinebot
@doctrinebot doctrinebot added the Bug label
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.