Laravel: delete() vs destroy() - What’s the Difference?
In this post, we’ll break down the differences between delete() and destroy() so you can use the right method in your Laravel applications.

When working with Laravel, deleting records is a common operation. However, developers often wonder whether they should use delete()
or destroy()
. While both methods remove records from the database, they function differently and serve different use cases.
In this post, we’ll break down the differences between delete()
and destroy()
so you can use the right method in your Laravel applications.
Understanding delete() in Laravel
What is delete()?
The delete()
method is an instance method in Eloquent, meaning you must first retrieve the model instance before calling delete()
.
Key Features of delete():
- Requires a Model Instance – You need to fetch the record first before calling
delete()
. - Supports Conditional Deletion – You can apply query conditions before deleting records.
- Triggers Eloquent Events – Events like
deleting
anddeleted
will be fired. - Can Delete Multiple Records – If used with a query, it can delete multiple records at once.
Example Usage of delete():
// Fetch and delete a single record
$user = User::find(1);
$user->delete();
// Delete multiple records with a condition
User::where('status', 'inactive')->delete();
Understanding destroy() in Laravel
What is destroy()?
The destroy()
method is a static method that deletes records by their primary key (ID) without retrieving them first.
Key Features of destroy():
- Deletes by ID Directly – No need to fetch records before deleting.
- Accepts Multiple IDs – You can pass one or more IDs to delete multiple records.
- Triggers Eloquent Events – Like
delete()
, it also firesdeleting
anddeleted
events.
Example Usage of destroy():
// Delete a single record by ID
User::destroy(1);
// Delete multiple records by ID
User::destroy([2, 3, 4]);
When to Use delete() vs destroy()?
Feature | delete() | destroy() |
---|---|---|
Requires fetching model first | ✅ | ❌ |
Deletes by ID | ❌ | ✅ |
Supports conditions | ✅ | ❌ |
Can delete multiple records | ✅ | ✅ |
Triggers Eloquent events | ✅ | ✅ |
Which One Should You Use?
- Use
delete()
when you already have a model instance or need to apply conditions before deleting. - Use
destroy()
when you want to delete records by their ID(s) without fetching them first.
Conclusion
Both delete()
and destroy()
serve different purposes in Laravel. If you need to delete records conditionally or work with model instances, use delete()
. If you want to delete records by their primary key(s) without retrieving them, destroy()
is the way to go.
Next time you need to remove records, make sure you’re using the right method for the job!
Tags
Do you Like?