I'm not sure that any one solution would be correct for all cases.
I often set each value separately (either via separate setter methods and/or the __set() "magic method"), so in that case I would not want to update the DB after each value is changed. Instead I use an update() method when the code logic says to me that it's time to save the change.
You could even use a __destroy() method to update the DB when the object is destroyed, perhaps coupled with some sort of "needs updating" object variable that is set to true when any method that sets/changes a value is called and is set to false whenever the update() method is called.