2014-06-21 2 views
0

мне нужно медиа-объекты, определенные следующим образом:Наследованию и Ассоциации

Категория:

  • Имя: струнное (25)
  • пробковые: строка (25)
  • Описание: Текст
  • документы: ассоциация с Документом

Документ = @ORM \ InheritanceType ("SINGLE_TABLE"):

  • категория: ассоциация (категория) и дискриминатор
  • название: строка (50)
  • Описание: Текст
  • пробковые: строка (50)

Например, категория:
ВИДЕО:

  • YouTube
  • Dailymotion
  • Vimeo

ФОТО:

  • локаль фото
  • облако фото

FILE:

  • файл локали
  • облако файл

документ из категории будет экземпляром документа \ Youtube и т.д. ...

Можно ли использовать столбец в качестве поля ассоциации и дискриминатор для наследование?

ответ

0

official documentation, кажется, не упоминает об этом ограничение.

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

Но вы все еще можете позволить Doctrine обрабатывать дискриминатор для вас: просто объявите столбец дискриминатора, который вы никогда не будете использовать напрямую, объявите его карту, а затем положите на логику сущности, чтобы сохранить согласованность между категорией и типом документа:

/** 
* @ORM\Entity(repositoryClass="... 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({ 
*  "youtube"="Youtube", 
*  "dailymotion"="Dailymotion", 
*  ... 
* }) 
*/ 
abstract class Document { 

    /** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="documents") 
    */ 
    protected $category; 
    ... 
    //this is to be called by children that all share a category field 
    public function setCategory(Category $c) { 
     $class = get_class($this); 
     if (strtolower($c->getName()) !== strtolower(substr($class, strrpos($class, '\\') + 1))) { 
      throw new \LogicException("Cannot bind " . $class . " to category " . $c->getName()); 
     } 
     $this->category = $c; 
     return $this; 
    } 
Смежные вопросы