delete method

Future<int> delete({
  1. Map<String, dynamic>? where,
})

Delete this model safely through RelationalModel.

  • Respects softDeletes
  • Uses Query.forceDelete for physical delete
  • Prevents mass-delete (must have PK)

Implementation

Future<int> delete({Map<String, dynamic>? where}) async
{
  final map = toMap();
  final pk = primaryKey;
  final id = map[pk];

  if (id == null) {
    throw Exception('Cannot delete: primary key ($pk) is null.');
  }

  // Soft delete mode
  if (softDeletes) {
    final $now = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now().toUtc());

    return await dbService.update(
      table,
      {'deleted_at': $now},
      where: '$pk = ?',
      params: [id],
    );
  }

  // Build query
  var q = query().where(pk, id);

  // Additional key=>value constraints
  if (where != null) {
    where.forEach((key, value) {
      q = q.where(key, value);
    });
  }

  // Perform raw delete using your Query.forceDelete
  return await q.forceDelete();
}