2012-06-19 4 views
4

Я пытаюсь сделать сущность с доктриной, которая имеет три ассоциации с другими сущностямиассоциация с доктриной 2

так что элемент связан с:

  • Должно быть связан с одним RssFeed, к которой он относится от
  • Может быть связан с одним или несколькими Locations
  • Может быть связан с одним или несколькими тегами

Вот моя попытка:

class Item{ 

    /** 
    * @ManyToOne(targetEntity="Rssfeed") 
    */ 
    protected $rssfeed; 

    /** 
    * 
    * @ManyToMany(targetEntity="Location") 
    */ 
    protected $locations; 

    /** 
    * 
    * @ManyToMany(targetEntity="Tag") 
    */ 
    protected $tags; 
} 

Теперь

  • Если RssFeed удаляется, связанные элементы должны быть удалены слишком
  • Если элемент удаляется, Rssfeeds и местоположения, и бирок к этому элементу следует отделить
  • Если местоположение или тег удалены, связанные элементы следует просто отсоединить, поскольку они являются необязательными ассоциациями.

Как мне изменить свой код для этого?

ответ

1

Для каждой ассоциации в вашей Item сущности, добавить OnDelete = "SET NULL" в @JoinColumn аннотацию. Внутри вашего местоположения и объектов тега найдите аннотации JoinColumn и добавьте onDelete = "SET NULL" для связи с "Item". Под объектом RssFeed найдите каждую аннотацию @JoinColumn и добавьте onDelete = "SET NULL". Обратите внимание, что для достижения этой цели вы также можете использовать каскадные операции Doctrine (т.е. cascade = {"remove"} и т. Д., Однако это будет значительно медленнее, так как работа не выполняется на уровне РСУБД.

+0

Я попытался если вы ошибаетесь, но вы предполагаете, что у меня должны быть переменные не только в классе Item, но и в соответствующих трех других классах. Правильно? Это необходимость? – Yasser1984

+0

Исправить, если я ошибаюсь, и за то, что вы описываете, да. – Lusitanian

1

U необходимо добавить @JoinColumn с onDelete = "CASCADE" для $ rssfeed и onDelete = "SET NULL" для внешних ключей в объектах местоположения и тега.

/** 
    * @ManyToOne(targetEntity="Rssfeed") 
    * @JoinColumn(name="rssfeed_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $rssfeed; 
Смежные вопросы