Таблица с именем уже существует - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь решить эту проблему

при выполнении

php bin/console doctrine:schema:update --dump-sql

Я получаю

In SchemaException.php line 108:
The table with name 'chris_test_sonata.page__block' already exists.

Очевидно, что таблица не существует в моембаза данных. Чтобы быть уверенным, что это не связано с кэшем, я даже выполнил операцию с новой базой данных, которую я только что создал, результат тот же.

Когда я ищу в своем вхождении page__block, я нахожу только это отображение

/**
 * @ORM\Entity
 * @ORM\Table(name="page__block")
 * @ORM\HasLifecycleCallbacks
 */
class SonataPageBlock extends BaseBlock

Так что для этой таблицы не должно быть других отображений.

У меня также есть block.orm.xml

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <!--
         This file has been generated by the EasyExtends bundle ( https://sonata-project.org/easy-extends )

         References :
            xsd                  : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd
            xml mapping          : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en
            association mapping  : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en
    -->
    <entity
        name="App\Application\Sonata\PageBundle\Entity\Block"
        table="page__block"
        repository-class="Doctrine\ORM\EntityRepository">

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

    </entity>
</doctrine-mapping>

Есть и другие случаи, но все вdev.log

И у меня это тоже есть в файле кеша от symfony dev / pool

<?php

namespace Symfony\Component\VarExporter\Internal;

return $getExpiry ? PHP_INT_MAX : Hydrator::hydrate(
    $o = [
        clone (($p = &Registry::$prototypes)['Doctrine\\ORM\\Mapping\\Entity'] ?? Registry::p('Doctrine\\ORM\\Mapping\\Entity')),
        clone ($p['Doctrine\\ORM\\Mapping\\Table'] ?? Registry::p('Doctrine\\ORM\\Mapping\\Table')),
        clone ($p['Doctrine\\ORM\\Mapping\\HasLifecycleCallbacks'] ?? Registry::p('Doctrine\\ORM\\Mapping\\HasLifecycleCallbacks')),
    ],
    null,
    [
        'stdClass' => [
            'name' => [
                1 => 'page__block',
            ],
        ],
    ],
    [
        $o[0],
        $o[1],
        $o[2],
    ],
    []
);

Я понятия не имею, что с ним не так и почему не работает отображение.

1 Ответ

2 голосов
/ 30 сентября 2019

Проблема в том, что у вас есть Block сущность с таблицей page__block, и вы создали новую сущность SonataPageBlock с тем же именем таблицы. Если вы измените имя таблицы на SonataPageBlock, все будет хорошо, но в базе данных будет 2 разных таблицы.

Если вы ищете способ расширения базовой сущности, вы можете прочитать о Table Inheritance .

...