簡體   English   中英

Symfony2抽象類與Doctrine的多重繼承

[英]Symfony2 abstract class multiple inheritance with Doctrine

我得到了以下UML方案: 在此輸入圖像描述

基本上,它是分類系統的開始,其中一些是可嵌套的,有些則不是。 我開始嘗試制作2層抽象類(Taxonomy和OfferCategory),因為它們都不能用作最終實體。 我使用了MappedSuperClass,但是我收到了以下錯誤:

[Doctrine\ORM\ORMException]                                                                                       
Column name `id` referenced for relation from LCH\CatalogBundle\Entity\HomeOfferCategory towards LCH\CatalogBund       le\Entity\OfferCategory does not exist.

我的主要關鍵字段是id ...

從更一般的角度來看,Doctrine提供的計划的最佳實現是什么?

謝謝 !

編輯:我試圖直接在我的RootOfferCategory類中轉置所有OfferCategory成員。 通過改變雙方的targetENtity,不再有錯誤。 意思是你不能自己引用映射的超類?

分類 :

/**
* Class Taxonomy
* @package LCH\CatalogBundle\Entity
* @ORM\MappedSuperclass
*/
abstract class Taxonomy implements TaxonomyInterface
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string the category name
     * @ORM\Column(name="name", type="string", length=255)
     */
     protected $name;
}

** OfferCategory:**

/**
 * OfferCategory
 * @ORM\MappedSuperclass
 */
abstract class OfferCategory extends Taxonomy
{
   /**
    * @var OfferCategory the category parent
    * @ORM\ManyToOne(targetEntity="LCH\CatalogBundle\Entity\OfferCategory",inversedBy="children", cascade={"persist"})
    * @ORM\JoinColumn(name="parent_id", referenceColumnName="id")
    */
    protected $parent;
   /**
   * @var OfferCategory the children categories
   *       @ORM\OneToMany(targetEntity="LCH\CatalogBundle\Entity\OfferCategory",mappedBy="parent", cascade={"persist"})
   */
   protected $children;
}

RootOfferCategory

/**
 * RootOfferCategory
 * Represents one root top category
 * @ORM\Table()
 *      @ORM\Entity(repositoryClass="LCH\CatalogBundle\Entity\RootOfferCategoryRepository")
 */
class RootOfferCategory extends OfferCategory
{

}

對不起,戰后到了。

從Doctrine文檔的這一部分

映射的超類不能是實體,它不是可查詢的,並且由映射的超類定義的持久關系必須是單向的(僅具有擁有方)。

這意味着根本不可能在映射的超類上進行一對多關聯。
此外,只有當映射的超類僅在一個實體中使用時,才能實現多對多關聯。此時此情況。

為了進一步支持繼承,必須使用單個或連接表繼承功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM