Триггеры при обновлении и при удалении - PullRequest
1 голос
/ 16 февраля 2012

При добавлении связи между двумя таблицами мне предлагается добавить триггеры к событиям On-Update и On-Delete внешней таблицы.Теперь я понимаю, что при удалении сторонней таблицы событие On-Delete будет инициировано в локальной таблице.

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

Теперь, Что будет делать каскадный триггер при обновлении ?При использовании propel я могу изменить свойства профиля без сохранения, а затем вызвать сохранение для пользователя, , если для профиля установлено каскадное обновление при обновлении, будет ли оно автоматически сохранять / обновлять информацию профиля при сохранении пользователя ?

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

Будем весьма благодарны за любые идеи, касающиеся Propel.Некоторое общее определение - не то, что я ищу.

1 Ответ

2 голосов
/ 16 февраля 2012

Если после 1.2 не все изменилось, это просто реализации (как собственные, так и эмулированные) для традиционных ограничений СУБД ( mysql 5.5 ограничений docs ).Это не имеет ничего общего с propel, это имеет отношение к базам данных.Таким образом, ON UPDATE позволит вам CASCADE обновленное значение ключа - это предполагает, что у вас есть FK, где значение может измениться.Это не имеет ничего общего с другими столбцами.

если для профиля настроено каскадное обновление при обновлении, будет ли оно автоматически сохранять / обновлять информацию профиля при сохранении пользователя?

Это будет сделано, даже если выCASCADE не включается, пока связанный объект гидратируется на объекте, для которого вы выполняете сохранение.Материал ON UPDATE не имеет к этому никакого отношения, это просто тот факт, что эти два несут отношения и, таким образом, имеют объекты-члены в каждом классе, которые допускают это.Когда вы вызываете save для объекта, он просматривает все гидратированные объекты и коллекции и сохраняет все, что помечено как измененное.

...