---
title: "Resolving & rejecting — Reports for Laravel | Roundly"
description: "Settle a report with Reports::resolve() or reject(), recording the moderator, a timestamp and a note, and firing the matching event."
url: https://roundly-consulting.com/open-source/docs/reports-for-laravel/resolving-reports
language: en
---

[All packages](https://roundly-consulting.com/open-source.md)

[Reports for Laravel](https://roundly-consulting.com/open-source/docs/reports-for-laravel.md)

# Resolving & rejecting

Resolve or reject through the facade to record the outcome:

```php
Reports::resolve($report, by: $admin, note: 'Removed the post.');

// or

Reports::reject($report, by: $admin, note: 'Not a violation.');
```

Both record the resolver in resolved\_by, the note in resolution\_note and the time in resolved\_at, move the status, and fire ReportStatusChanged followed by ReportResolved or ReportRejected.

The move is checked against the stored status first, under a row lock, and the status and resolution are written together — so an illegal move throws and writes nothing, and resolving an already-resolved report (or rejecting a rejected one) is a no-op that keeps the first decision and fires no second event.

## Reading the outcome

```php
Reports::resolve($report, by: $admin, note: 'Removed the post.');

$report->status;           // Status::Resolved
$report->resolvedBy;       // $admin
$report->resolution_note;  // 'Removed the post.'
$report->resolved_at;      // the moment it was settled
```

## System actions

Both arguments are optional. Without a resolver, the report is settled with an empty resolved\_by — useful for automated moderation, as long as no moderation request is open:

```php
Reports::resolve($report);   // no resolver recorded

// or

Reports::reject($report, note: 'Auto-rejected: subject already removed.');
```

## Transition rules still apply

Resolving and rejecting are status transitions, so they follow the table: both are allowed from Pending and InReview. A resolved report can be closed, and any settled report can be moved back to Pending for another decision:

```php
// A resolved report can be closed…
Reports::close($report);

// …and any settled report can be reopened for another decision.
Reports::changeStatus($report, Status::Pending);
Reports::reject($report, by: $admin, note: 'On second review, not a violation.');
```

Reopening a settled report — back to Pending, or InReview — clears its resolver, note and resolved\_at; closing a resolved report keeps them.

While a moderation request is open, resolve() and reject() record a named moderator’s decision instead of settling immediately, and refuse anyone else — see Multi-moderator moderation.

## Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

[More ways to support, including crypto](https://roundly-consulting.com/support-us.md)

By donating, you agree to our [donation terms](https://roundly-consulting.com/donation-terms.md).

[Support our open source work (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Join us on Patreon (opens in a new tab)](https://www.patreon.com/cw/roundly)

## Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.

[Get a quote in 48 hours](https://roundly-consulting.com/contact.md) [Browse all packages](https://roundly-consulting.com/open-source/docs/reports-for-laravel.md)
