add: `hasOne` support