like update_or_create - but recursive