Zend Db Cascading Удалить - PullRequest
       40

Zend Db Cascading Удалить

1 голос
/ 06 января 2012

Я пытаюсь это выяснить,

У меня есть три таблицы (Таблица A, Таблица B, Таблица C) Таблица A является родительской для B, а B является родительской для C.

Я правильно построил отношения, установив

$_dependentTables & $_referenceMap appropriately

, поэтому, когда я обновляю / удаляю, скажем, строку из A, соответствующие затронутые строки в B также обновляются / удаляются.Точно так же, если я удаляю строку из B, соответствующие затронутые строки в C обновляются / удаляются.

ОДНАКО, если я удаляю из A, а строки в B удаляются, строки, которые должны быть удалены в C, делаютне удаляется !!!!!

Это потому, что функция каскадирования Zend не поддерживает каскадирование до полного расширения или я что-то упустил?

1 Ответ

1 голос
/ 07 января 2012

Основная причина, по которой он не распространяется за пределы одного отношения, заключается в том, что после вызова Zend_Db_Table_Row::delete() он получит зависимые таблицы и вызовет Zend_Db_Table::_cascadeDelete(). В _cascadeDelete() он создаст предложение where и использует Zend_Db_Table::delete() для удаления одной или нескольких записей.

Чтобы разрешить истинное каскадное удаление, необходимо переписать _cascadeDelete(), чтобы сначала получить набор строк затронутых записей, выполнить цикл по набору и вызвать delete() для каждой строки.

...