В моей базе данных используется механизм MyISAM, поэтому я не могу вызвать действие каскадного удаления, поскольку MyISAM его не поддерживает. В то же время я хотел бы удалить связанные записи в своем приложении yii2. Как я могу это сделать?
Удаление связанных записей в yii2 — лучшие практики
comment
Возможный дубликат Yii2: как одновременно удалить связанные моделирует данные из базы данных?
- person Anton Rybalko   schedule 22.01.2018
Ответы (2)
Примечание: приведенное ниже решение будет работать, только если вы используете метод удаления ActiveRecord.
Вы можете использовать метод beforeDelete и удалить соответствующие записи — в этом случае вы напишете код один раз, и он будет выполняться каждый раз, когда вы вызываете $model->delete()
.
Или вы можете добавить обработчик к событию EVENT_BEFORE_DELETE.
person
rkm
schedule
27.05.2015
Простите за поздний ответ. Я думаю, что в первую очередь оптимизация зависит от самой базы данных (правильных индексов и т.д.). Как вариант, вы можете создать хранимую процедуру, которая удаляет связанные записи и вызывать эту процедуру...
- person rkm; 28.05.2015
Как насчет создания триггеров?
- person Patryk Radziszewski; 29.05.2015
Есть несколько вариантов решения этой проблемы.
1) Создайте триггер на стороне БД:
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
END;
2) Удалите связанные записи внутри yii2 beforeDelete а> функция:
public function beforeDelete() {
if (!parent::beforeDelete()) {
return false;
}
// ... custom code here ...
return true;
}
Триггеры работают быстрее и хорошо обеспечивают ссылочную целостность, поэтому я выбрал их.
person
Oleksandr Pyrohov
schedule
06.08.2015