Name:
interface
Value:
Extend your Amplify Gen 2 app with AWS Blocks — self-contained backend capabilities you compose into your existing backend.
Gen1 DocsLegacy

Page updated Jun 6, 2024

Customize data model identifiers

Identifiers are defined using the .identifier() method on a model definition. Usage of the .identifier() method is optional; when it's not present, the model will automatically have a field called id of type ID that is automatically generated unless manually specified.

const schema = a.schema({
Todo: a.model({
content: a.string(),
completed: a.boolean(),
})
.authorization(allow => [allow.publicApiKey()]),
});
let todo = Todo(
content: "Buy Milk",
completed: false)
let createdTodo = try await Amplify.API.mutate(request: .create(todo)).get()
print("New Todo created: \(createdTodo)")

If you want, you can use Amplify Data to define single-field and composite identifiers:

  • Single-field identifier with a consumer-provided value (type: id or string, and must be marked required)
  • Composite identifier with a set of consumer-provided values (type: id or string, and must be marked required)

Single-field identifier

If the default id identifier field needs to be customized, you can do so by passing the name of another field.

const schema = a.schema({
Todo: a.model({
todoId: a.id().required(),
content: a.string(),
completed: a.boolean(),
})
.identifier(['todoId'])
.authorization(allow => [allow.publicApiKey()]),
});
let todo = Todo(
todoId: "MyUniqueTodoId",
content: "Buy Milk",
completed: false)
let createdTodo = try await Amplify.API.mutate(request: .create(todo)).get()
print("New Todo created: \(createdTodo)")

Composite identifier

For cases where items are uniquely identified by more than a single field, you can pass an array of the field names to the identifier() function:

const schema = a.schema({
StoreBranch: a.model({
geoId: a.id().required(),
name: a.string().required(),
country: a.string(),
state: a.string(),
city: a.string(),
zipCode: a.string(),
streetAddress: a.string(),
}).identifier(['geoId', 'name'])
.authorization(allow => [allow.publicApiKey()]),
});
let queriedStoreBranch = try await Amplify.API.query(
request: .get(
StoreBranch.self,
byIdentifier: .identifier(
geoId: "123",
name: "Downtown")))