powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Doctrine2 проблема с наследованием ManyToOne
7 сообщений из 7, страница 1 из 1
Doctrine2 проблема с наследованием ManyToOne
    #38015865
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть классы
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
/**
 * @ORM\Entity
 * @ORM\MappedSuperclass
 */
class A{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;    
    
    /**
     * @ORM\ManyToOne(targetEntity="Acme\ABundle\Entity\user")
     */
    private $user;
....
}    

// И потомок от него
/**
 * @ORM\Entity
 */
class B extends A {
    
    /**
     * @var B
     * @ORM\ManyToOne(targetEntity="B")
     */
    private $parent = null;
...



всё собирается вроде нормально, доктрина на структуру не ругается и вроде-бы по логам всё нормально создает, но в базе в таблице ассоциированной с "B" пропадает поле "user", все есть а этого нет (вернее нет поля "user_id" которое должно было быть создано), пересоздание БД ничего не дает, подозреваю что проблема в ManyToOne, т.к. остальные обычные Column.
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38016275
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил метаданные доктрины, самое интересное, там всё нормально - ничего не теряется. Видимо при генерации стейтментов создания теряется.
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38016343
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докопался до сути проблемы косяк был в доктрине.
Не знаю как в последних релизах может поправили...

Проблема в генерации схемы из метаданных Doctrine\ORM\Tools\SchemaTool
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private function _gatherRelationsSql($class, $table, $schema)
    {
        foreach ($class->associationMappings as $fieldName => $mapping) {

           // if (isset($mapping['inherited'])) { // - исходная версия

	/**
             * SSW
             * Если наследование в каждую новую Entity то inherited обрабатывать всё таки надо
             */
	if (isset($mapping['inherited']) && !$class->isInheritanceTypeNone() && !$class->isInheritanceTypeTablePerClass() ) {
                continue;
            }            

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


В двух словах о сути проблемы:
В данном случае при генераци схемы после обычных columns, идет добавление FK columns. При наследовании по типу INHERITANCE_TYPE_JOINED или INHERITANCE_TYPE_SINGLE_TABLE в потомках поля предков (в данном случае помеченные как $mapping['inherited']) следует пропускать, что верно, но почему-то разработчики доктрины тут забыли о INHERITANCE_TYPE_NONE и INHERITANCE_TYPE_TABLE_PER_CLASS (для которых эти поля всё таки нужно генерировать)
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38016486
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSW,

Увы радость была не долгой, похоже доктрина любит только INHERITANCE_TYPE_JOINED или INHERITANCE_TYPE_SINGLE_TABLE, остальное всё через одно место!!!

Парсер DQL не может правильные запросы для наследования INHERITANCE_TYPE_NONE и INHERITANCE_TYPE_TABLE_PER_CLASS делать.
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38016499
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSW,

Проблема в парсере для простых запросов решается просто. А вообще такое ощущение что авторы доктрины решили, что данная функциональность вообще не нужна и забили на неё... весь код парсера так и сквозит
Код: php
1.
if (isset($mapping['inherited'])) {


Начинаю тихо ненавидеть доктрину.
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38017692
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSWНачинаю тихо ненавидеть доктрину.
я это прошел 3 года назад и поэтому и не использую этот УГ
...
Рейтинг: 0 / 0
Doctrine2 проблема с наследованием ManyToOne
    #38024336
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artas,

Есть альтернатива? Чтоб ещё без геморроя можно было в Symfony2 запустить, и ещё с аннотациями (желательно по ближе к аннотациям jpa).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Doctrine2 проблема с наследованием ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]