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

Open
doctrinebot opened this Issue Nov 3, 2012 · 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 Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment