delete method
Deletes the record. Soft-deletes when supported unless force is true.
Implementation
Future<void> delete({bool force = false}) async {
final def = expectDefinition();
final resolver = _resolveResolverFor(def);
final pk = def.primaryKeyField;
if (pk == null) {
throw StateError(
'Model ${def.modelName} must declare a primary key before deletion.',
);
}
final key = _primaryKeyValue(def);
if (key == null) {
throw StateError(
'Model ${def.modelName} is missing primary key ${pk.name}.',
);
}
if (!force && def.usesSoftDeletes) {
final column =
def.softDeleteField?.columnName ?? def.metadata.softDeleteColumn;
final timestamp = Carbon.now().toUtc().toDateTime();
_asAttributes.setAttribute(column, timestamp);
final plan = MutationPlan.update(
definition: def,
rows: [
MutationRow(values: {column: timestamp}, keys: {pk.columnName: key}),
],
driverName: resolver.driver.metadata.name,
);
await resolver.runMutation(plan);
return;
}
final plan = MutationPlan.delete(
definition: def,
rows: [
MutationRow(values: const {}, keys: {pk.columnName: key}),
],
driverName: resolver.driver.metadata.name,
);
await resolver.runMutation(plan);
}