Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 16, 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({
tenantId: a.id().required(),
name: a.string().required(),
country: a.string(),
state: a.string(),
city: a.string(),
zipCode: a.string(),
streetAddress: a.string(),
}).identifier(['tenantId', 'name'])
.authorization(allow => [allow.publicApiKey()]),
});
let queriedStoreBranch = try await Amplify.API.query(
request: .get(
StoreBranch.self,
byIdentifier: .identifier(
tenantId: "123",
name: "Downtown")))