Soft Deleting
In addition to actually removing records from your database, Eloquent can also "soft delete" models. When models are soft deleted, they are not actually removed from your database. Instead, a
deleted_at
attribute is set on the model indicating the date and time at which the model was "deleted". To enable soft deletes for a model, add the
 Illuminate\Database\Eloquent\SoftDeletes
trait to the model:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;
}
You should also add the
deleted_at 
column to your database table. The Laravel
schema builder
contains a helper method to create this column:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Facades\Schema;

Schema::table('flights', function (Blueprint $table) {
    $table->softDeletes();
});

Schema::table('flights', function (Blueprint $table) {
    $table->dropSoftDeletes();
});
Now, when you call the
delete
method on the model, the
deleted_at 
column will be set to the current date and time. However, the model's database record will be left in the table. When querying a model that uses soft deletes, the soft deleted models will automatically be excluded from all query results. To determine if a given model instance has been soft deleted, you may use the
trashed
method:
if ($flight->trashed()) {
    //
}
Restoring Soft Deleted Models Sometimes you may wish to "un-delete" a soft deleted model. To restore a soft deleted model, you may call the
restore
method on a model instance. The restore method will set the model's
deleted_at 
column to
null
:
$flight->restore();
You may also use the
restore
method in a query to restore multiple models. Again, like other "mass" operations, this will not dispatch any model events for the models that are restored:
Flight::withTrashed()
        ->where('airline_id', 1)
        ->restore();
The
restore
method may also be used when building relationship queries:
$flight->history()->restore();
Permanently Deleting Models
Sometimes you may need to truly remove a model from your database. You may use the
forceDelete
method to permanently remove a soft deleted model from the database table:
$flight->forceDelete();
You may also use the forceDelete method when building Eloquent relationship queries:
$flight->history()->forceDelete();
Querying Soft Deleted Models As noted above, soft deleted models will automatically be excluded from query results. However, you may force soft deleted models to be included in a query's results by calling the withTrashed method on the query:
use App\Models\Flight;

$flights = Flight::withTrashed()
                ->where('account_id', 1)
                ->get();
The withTrashed method may also be called when building a relationship query:
$flight->history()->withTrashed()->get();
Retrieving Only Soft Deleted Models The
onlyTrashed
method will retrieve only soft deleted models:
$flights = Flight::onlyTrashed()
                ->where('airline_id', 1)
                ->get();
by გიორგი ბაკაშვილი
4 years ago
Laravel
0
Pro tip: use ```triple backticks around text``` to write in code fences