anonymous@RULINUX.NET~# Last login: 2024-11-06 03:41:07
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Doctrine и наследование сущностей.

Есть две сущности. Thread и наследуемая от нее Article

]
/**
 * @ORM\Entity(repositoryClass="RL\ForumBundle\Entity\ThreadRepository")
 * @ORM\Table(name="threads")
 * @ORM\MappedSuperclass
 * @ORM\HasLifecycleCallbacks()
 */

class Thread
{
        /**
         * @ORM\Id
         * @ORM\Column(type="integer", name="id")
         * @ORM\GeneratedValue(strategy="AUTO")
         */

        protected $id;
        /**
         * @ORM\OneToMany(targetEntity="RL\ForumBundle\Entity\Message", mappedBy="thread")
         */

        protected $messages;
        /**
         * @ORM\ManyToOne(targetEntity="RL\ForumBundle\Entity\Subsection", inversedBy="threads")
         */

        protected $subsection;
        /**
         * @ORM\Column(type="boolean")
         */

        protected $attached = false;
        /**
         * @ORM\Column(type="datetime", name="timest")
         */

        protected $postingTime;
        /**
         * @ORM\Column(type="datetime", name="changing_timest")
         */

        protected $changingTime;
        //...
 

]
/**
 * @ORM\Entity()
 * @ORM\Table(name="articles")
 */

class Article extends Thread
{
        /**
         * @ORM\Column(type="boolean", name="approved")
         */

        protected $approved = false;
        /**
         * @ORM\ManyToOne(targetEntity="RL\SecurityBundle\Entity\User")
         */

        protected $approvedBy;
        /**
         * @ORM\Column(type="datetime", name="approve_timest")
         */

        protected $approveTimest;
        //...
 

При генерировании схемы доктрина создает таблицу отдельно для Thread и отдельно для Article. Притом в Article не включается поле subsection. Есть ли возможность сделать так:

]
CREATE TABLE Thread (
        id    SERIAL PRIMARY KEY,
        --остальные поля сущности Thread
        );
 

]
CREATE TABLE Article (
        approved BOOLEAN
        --остальные поля сущности Article
        )
        INHERITS (Thread);
 

?

Tux-oid(*) (2012-06-14 13:41:07)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120428 Firefox/12.0 SeaMonkey/2.9.1

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Doctrine и наследование сущностей. от Tux-oid 2012-06-14 13:41:07
avatar
Скрыть

Re:Doctrine и наследование сущностей.

Собственно ответ

]
/**
 * @ORM\Entity(repositoryClass="RL\ForumBundle\Entity\ThreadRepository")
 * @ORM\Table(name="threads")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"thread" = "Thread", "article" = "RL\ArticlesBundle\Entity\Article"})
 * @ORM\HasLifecycleCallbacks()
 */

class Thread
{
        /**
         * @ORM\Id
         * @ORM\Column(type="integer", name="id")
         * @ORM\GeneratedValue(strategy="AUTO")
         */

        protected $id;
        /**
         * @ORM\OneToMany(targetEntity="RL\ForumBundle\Entity\Message", mappedBy="thread")
         * @ORM\OrderBy({"id" = "ASC"})
         */

        protected $messages;
        /**
         * @ORM\ManyToOne(targetEntity="RL\ForumBundle\Entity\Subsection", inversedBy="threads")
         */

        protected $subsection;
        /**
         * @ORM\Column(type="boolean")
         */

        protected $attached = false;
        /**
         * @ORM\Column(type="datetime", name="timest")
         */

        protected $postingTime;
        /**
         * @ORM\Column(type="datetime", name="changing_timest")
         */

        protected $changingTime;
        //...
 

Tux-oid(*)(2012-06-14 13:56:03)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120428 Firefox/12.0 SeaMonkey/2.9.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:Doctrine и наследование сущностей. от Tux-oid 2012-06-14 13:56:03
avatar
Скрыть

Re:Doctrine и наследование сущностей.

Так ты разобрался? Я недавно читал про это вроде всё решаемо. Моку поискать ссылку. А всё понял, ты начале про дескриминатор забыл похоже.

Ax-Xa-Xa(*)(2012-06-15 13:12:45)
Отредактировано Ax-Xa-Xa по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5
[#] [Добавить метку] [Редактировать] Ответ на: Re:Doctrine и наследование сущностей. от Ax-Xa-Xa 2012-06-15 13:12:45
avatar
Скрыть

Re:Doctrine и наследование сущностей.

С этим разобрался быстро. А вот с тем как добавлять сущности-потомки не меняя родителя - нет. Нашел вот хак но это почти полное переписывание драйвера анотаций.

Tux-oid(*)(2012-06-15 13:22:16)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120428 Firefox/12.0 SeaMonkey/2.9.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:Doctrine и наследование сущностей. от Ax-Xa-Xa 2012-06-15 13:12:45
avatar
Скрыть

Re:Doctrine и наследование сущностей.

Кстати про дискриминатор. использование MappedSuperclass и дискриминаторов, как я понял, просто два разных подхода к наследованию сущностей.

Tux-oid(*)(2012-06-15 13:29:29)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120428 Firefox/12.0 SeaMonkey/2.9.1
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!