2013-12-13 4 views
4

В чем разница между этими двумя?Разное в аннотация Symfony 2/Doctrine 2

/** 
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products",cascade={"remove"}) 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
*/ 
protected $category; 

и

/** 
* 
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products") 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")) 
*/ 
protected $category; 

Спасибо!

ответ

4

Первый сообщает ORM, чтобы выполнить сам каскад. Следовательно, Doctrine будет хранить данные в памяти, чтобы выполнять каскад удаления.

Второй расскажет базе данных о выполнении каскада onDelete, выгружая процесс из учения.

Помните, что первый вариант сохранит в памяти массивы/ассоциации для выполнения каскада удаления, который может быть действительно тяжелым.

Типичный пример использования для первого параметра - это случай, когда ваш график модели данных не слишком тяжелый, и вы действительно хотите использовать все события жизненного цикла объекта, даже тех, кто удаляется с помощью каскада.

Недостатком второго является то, что вы не можете использовать эти события жизненного цикла объекта, но если ваша модель данных/график действительно слишком тяжелая, это может быть единственным вариантом решения каскада.

+0

спасибо, а когда используете первый или второй? – Twinsen

+0

Отредактировано мое первое сообщение :) надеюсь, что это поможет! –

+0

еще раз спасибо ... что Бенфит? как @PostRemove и т. д. ??? спасибо! :) – Twinsen

Смежные вопросы