delete method

Future<void> delete({
  1. bool force = false,
})
inherited

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);
}