dynamic update will force the update to be updating only the fields that have changed.
so when you make your blameable class track the query used, it will only show the fields that have changed. meaning you have to rewrite that class to hijack and store the query used. which is different from the blame class provided.
if you only want a snapshot only when updating, sure you can do it too.
public function beforeSave()
{
if($id != 0)
{
$data = $this->findFirst($id)->toArray();
$this->setSnapshotData($data);
}
}
and viola. however if you do this. there will be more cycle consumption, both web server and database. which will really slow your application down. because it has to retrieve the data from database AGAIN. however if you use the snapshot data when you first retrieve it there is no additional cycle. just memory consumption.
so its really up to you. and seriously unless your model is stupid huge, the consumption of keeping the snapshot when it is first retrieve would be a few bytes the most. also if your model is stupid huge that means you really need to work on designing your database model. normalization.
Imo, stick to snapshot from retriving.