В одном из них происходит обновление связанных моделей (помимо owner). Использование updateAttributes() не вызывает проблем, но требуется запустить обработчики других поведений в процессе обновления связанных моделей, например, TimestampBehavior, BlameableBehavior, LogBehavior (кастомный).
Если вызвать внутри save(), то рискуем получить рекурсию, плюс в некоторых случаях некоторые поведения должны быть исключены.
Пробую такое решение, но при попытке прикрепить поведения обратно, возникает ошибка.
Код: Выделить всё
$detachedBehaviors = $this->getDetachedBehaviors();
foreach ($model->behaviors as $key => $behavior) {
if (in_array($behavior::className(), $detachedBehaviors)) {
$model->detachBehavior($key);
}
}
$model->save(false, [$this->attribute]);
$model->attachBehaviors($detachedBehaviors);
Из альтернатив, которые приходят в голову:
- Вручную вызвать события нужных поведений.
Использовать updateAttributes() вместо save().
Полагаю, что это будет отдельное поведение.