У меня есть ощущение, что я могу что-то упустить здесь, но я все равно иду.
Подумайте об этом: у меня есть класс «Бронирование», в котором есть поле user_id и поведение с возможностью версии, и я запускаю следующий код:
$booking = new Booking();
$booking->user_id = 1;
$booking->isValid();
$booking->user_id = 2;
$booking->save();
Это приводит к тому, что в таблицу «бронирования» вставляется правильная запись. НО запись, вставленная в таблицу «booking_version», устарела! Для user_id установлено значение 1, поскольку данные извлекаются из инициатора событий, созданного во время первого вызова isValid(). Кроме того, поле id установлено на 0 по той же причине (что означает, что запись версии не может быть связана обратно с бронированием).
Я могу обойти эту проблему, вызвав $booking->clearInvokedSaveHooks() перед save(), но я действительно не хочу этого делать, потому что я не хочу снова запускать все свои сохранения при сохранении.
Есть ли лучший способ обойти это?