我们可以在Doctrine中扩展实体吗?

时间:2016-04-28 02:11:48

标签: symfony doctrine entities

我正在使用Doctrine进行我的第一个项目,我偶然发现了这一点。

  1. 我有一个实体User,它是一个映射的超类。

    /**
     * @ORM\MappedSuperclass
     */
     abstract class User
     {
       /**
        * @var int
        */
       protected $id;
    
       /**
        * @var string
        */
       protected $name;
    
       /**
        * @ORM\Embedded(class="AppBundle\Entity\Person")
        * @var Person
        */
       protected $person;
    
       /**
        * @var Authors[]|Collection|Selectable
        */
       protected $authors;
     }
    
  2. 我从上面的用户实体创建一个作者实体

        class Author extends User
        {
            /**
             * @ORM\Id
             * @ORM\Column(type="integer")
             * @ORM\GeneratedValue(strategy="AUTO")
             * @var int
             */
            protected $id;
    
            /**
             * @ORM\JoinColumn(name="publisher_id", referencedColumnName="id", nullable=false, unique=true)
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
             * @var Publisher
             */
            protected $publisher;
    
            /**
             * @ORM\OneToMany(targetEntity="AppBundle\Entity\Publisher", mappedBy="author")
             * @var Approval[]|Collection|Selectable
             */
            protected $approvals;
    
        }
    
    1. 我使用作者实体创建一个对象实体Book

      /**
       * @ORM\Entity
       * @ORM\Table(name="magazine", options={"collate":"utf8_general_ci"})
       */
      class Book
      {
         /**
          * @ORM\Id
          * @ORM\Column(type="integer")
          * @ORM\GeneratedValue(strategy="AUTO")
          * @var int
          */
         protected $id;
      
         /**
          * @ORM\JoinColumn(name="publisher_id", referencedColumnName="id", nullable=false, unique=true)
          * @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
          * @var Publisher
          */
         protected $publisher;
      }
      
    2. 我的发布商实体如下:

          /**
           * @ORM\Entity
           * @ORM\Table(name="ops_approval", options={"collate":"utf8_general_ci"})
           */
          class Publisher
          {
             /**
              * @ORM\Id
              * @ORM\Column(type="integer")
              * @ORM\GeneratedValue(strategy="AUTO")
              * @var int
              */
             protected $id;
      
             /**
              * @ORM\Column(type="datetime", nullable=false)
              */
             protected $createdAt;
      
             /**
              * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Author", inversedBy="authors")
              * @ORM\JoinColumn(name="author_id", referencedColumnName="id")
              */
             protected $author;
      
             /**
              * @ORM\OneToMany(targetEntity="AppBundle\Entity\Book", mappedBy="book"
              */
             protected $book;
          }
      
      1. 现在,我可以扩展已发布的实体以创建图书实体

        /**
         * @ORM\Entity
         * @ORM\Table(name="book", options={"collate":"utf8_general_ci"})
         */
        class Book extends Magazine
        {
           /**
            * @ORM\Id
            * @ORM\Column(type="integer")
            * @ORM\GeneratedValue(strategy="AUTO")
            * @var int
            */
           protected $id;
        
           /**
            * @ORM\JoinColumn(name="published_id", referencedColumnName="id", nullable=false, unique=true)
             * @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
             * @var Publisher
             */
            protected $publisher;
        }
        

1 个答案:

答案 0 :(得分:2)