add first_or_create support